C 標準庫高階6

2021-10-14 15:31:28 字數 1035 閱讀 5225

二十

二、函式指標和函式呼叫運算子的效率

使用less的sort呼叫比使用inline comp的sort呼叫快

原因是因為函式內聯。less::operator()函式物件的operator()函式是內聯的,operator()的函式體可以直接被編譯器使用,直接在呼叫處進行展開。所以,sort中不包含函式呼叫,編譯器就可以對這段不包含函式呼叫的**進行優化

而函式指標引數抑制了內聯機制,因為如果使用函式指標來呼叫內聯函式,那麼就需要獲取inline函式的位址。那麼編譯器就必須為此函式產生乙個函式實體,因此內聯失敗

測試

inline bool comp(int a, int b)

開啟優化選項後

總的來說,對10000個隨機數進行排序,函式指標作為函式物件確實比呼叫運算子的方式慢一些

二十三、count、find、binary_seach、lower_bound、upper_bound和equal_range

二十四、一些建議性的規則

1、list中的remove演算法能真正的刪除元素,但是stl中的remove卻不能真正的刪除元素,此外,關聯容器中的find是基於等價的,而stl中的find是基於相等...... 所以。如果在對容器進行操作時,優先使用容器自帶的演算法,而不是優先使用stl的同名演算法,因為這樣會更適合容器並且效率更高。

2、如果stl中有演算法能實現需求,那麼就不要重複造輪子了。

3、使用stl時,如果stl無法滿足需求,不要特化stl中的演算法,容器或者函式子類,直接另外實現

參考《effective stl》

C 標準庫高階1

一 容器的選擇 一般情況下,最容易想到也最常用的就是vector,但是如果要是頻繁在容器物件的中間刪除和插入元素,就要考慮使用list,因為list是基於節點的容器,當頻繁在容器中間刪除和插入元素時,不需要將很多元素整體向前或者向後移動,只需要操作節點元素指標指向的位置,效率較高且不會導致迭代器失效...

C 標準庫高階2

十 把容器資料傳給舊的介面 1.vector傳入陣列型api void stlwitholdapi int ps,size t num if v.empty return 0 先判段容器是否為空,然後傳入容器首元素的位址和長度即可 2.string傳入字串api void stlwitholdapi...

C語言標準庫概覽詳述 6 訊號

標頭檔案中提供了一些用於處理程式執行期間所引發的異常條件的功能,如處理 於外部的中斷訊號或程式執行期間出現的錯誤等事件。void signal int sig,void handler int int signal 用於確定以後當訊號sig出現時的處理方法。如果handler的值是sig dfl,那...