STL學習筆記 七 程式中使用STL

2022-07-08 18:36:14 字數 2190 閱讀 5124

條款43:演算法呼叫優先於手寫迴圈

class

widget ;

vector

vec;

演算法呼叫:

for_each(vec.begin(), vec.end(), mem_fun_ref(&widget::test));

手寫迴圈:

for(auto it = vec.begin(); it != vec.end(); ++it)  it->test();

演算法呼叫優於手寫迴圈:效率更高; 正確性更容易; 可維護性更高

條款44:容器的成員函式優於同名演算法

優先使用容器的成員函式: 速度更快;與容器結合更緊密

set

::iterator it = s.find(2012); //

t(n) = o(logn)

set::iterator it = find(s.begin(), s.end(), 2012); //

t(n) = o(n)

使用關聯容器時,優先考慮使用成員函式形式的 find、count,可以獲得對數時間效能

list容器成員函式效率高於同名的stl演算法函式(list容器的成員函式無需任何物件拷貝,僅僅維護指標)

注: list容器中 remove, remove_if, unique 不同於vector容器的先remove然後erase用法,list容器是實實在在刪除元素,所以無需再erase

注: stl的sort演算法不能用於list容器(因為sort需要隨機訪問迭代器), list::sort()是穩定演算法

條款45:正確區分 count,find, binary_search, lower_bound, upper_bound, equal_range

在選擇具體的查詢策略時,首先需要考慮迭代器制定的區間是否有序,如果有序,可以使用 binary_search, lower_bound, upper_bound, equal_range

binary_search 返回值為 bool,僅僅表明查詢值是否在有序序列中

equal_range 返回一對迭代器

第乙個迭代器等於 lower_bound 返回的迭代器,指向第乙個與查詢值相等的元素

第二個迭代器等於 upper_bound 返回的迭代器,指向最後乙個與查詢值相等元素的下乙個元素

1.如果返回的兩個迭代器相等,則表明沒有找到欲查詢值(通過這個特性進行檢查最終查詢結果)

2.有序序列中存在多少個元素與查詢值相等: distance(it.first, it.second); //計算返回的兩個迭代器之間的距離

條款46:考慮使用函式物件而不是函式作為stl演算法的引數

vectorvec;

sort(vec.begin(), vec.end(),greater()); //

使用標準函式物件,不要自己寫乙個comp函式

當將乙個函式進行引數傳遞時,其實傳遞的是該函式指標:

sort(vector::iterator first, vector::iterator last, bool (*comp)(double, double));

函式指標引數抑制了內斂機制,而標準stl函式物件使用了內斂機制,所以sort比qsort快

條款47:避免產生"

write only

"**

寫清晰的**,避免編寫非常複雜的復合語句,軟體的維護比開發過程通常消耗更長的時間

條款48:總是#include正確的標頭檔案

1.幾乎所有的標準stl容器都宣告在與之同名的標頭檔案中

2.除了4個stl演算法之外,其餘所有演算法宣告在中,這4個演算法是 accumulate, inner_product, adjacent_difference, partial_sum 這4個宣告在中

3.所有迭代器宣告在中

4.標準函式子(如 less), 函式介面卡(bind2nd) 宣告在中

條款49:學會分析與stl相關的編譯器診斷資訊

條款50:熟悉與stl相關站點

在程式中使用STL(第7章)(條款44,45)

這個條款應該是毫無疑問的,下面是書中給出的理由 1 成員函式往往更快 2 成員函式通常與容器集合的更加緊密,特別是關聯容器,而這時演算法所不能的,演算法比較處理通用性的東西 void listtest listl2 l1.sort l2.sort l1.merge l2 演算法 listl std ...

Oracle中使用程式包學習例項

1 建立程式包規範,可以宣告變數,型別,子程式等 create or replace package pack me is procedure emp proc num number function emp func empno number return varchar2 end pack me...

學習筆記 STL模板中map的使用

建立map容器儲存學生姓名和密碼,輸出所有學生資訊,並根據姓名查詢相應的密碼 define crt secure no warnings include include include include include using namespace std int main 查詢某個人的密碼 str...