引言...............................................................................................................1
1 容器..........................................................................................9
第1 條:慎重選擇容器類型。............................................................... 9
第2 條:不要試圖編寫獨立於容器類型的代碼。.................................... 12
第3 條:確保容器中的對象拷貝正確而高效。....................................... 16
第4 條:調用empty 而不是檢查size()是否為0。................................... 18
第5 條:區間成員函數優先於與之對應的單元素成員函數。............................ 20
第6 條:當心C++編譯器最煩人的分析機製。.................................................... 26
第7 條:如果容器中包含瞭通過new 操作創建的指針,切記在容器對象析構前將
指針delete 掉。......................................................................... 28
第8 條:切勿創建包含auto_ptr 的容器對象。......................................... 32
第9 條:慎重選擇刪除元素的方法。............................................................... 34
第10 條:瞭解分配子(allocator)的約定和限製。........................................... 38
第11 條:理解自定義分配子的閤理用法。............................................. 44
第12 條:切勿對STL 容器的綫程安全性有不切實際的依賴。......................... 47
2 vector 和string .....................................................................................51
第13 條:vector 和string 優先於動態分配的數組。............................................. 51
第14 條:使用reserve 來避免不必要的重新分配。............................................. 53
第15 條:注意string 實現的多樣性。.......................................................... 55
第16 條:瞭解如何把vector 和string 數據傳給舊的API。.................................... 60
第17 條:使用“swap 技巧”除去多餘的容量。................................................... 63
第18 條:避免使用vector<bool>。................................................................................. 64
3 關聯容器..........................................................................................................................67
第19 條:理解相等(equality)和等價(equivalence)的區彆。...................................... 67
第20 條:為包含指針的關聯容器指定比較類型。........................................ 71
第21 條:總是讓比較函數在等值情況下返迴false。.............................................. 74
第22 條:切勿直接修改set 或multiset 中的鍵。............................................... 77
第23 條:考慮用排序的vector 替代關聯容器。............................................... 82
第24 條:當效率至關重要時,請在map::operator[ ]與map::insert 之間謹慎做齣選擇。..... ...................... 87
第25 條:熟悉非標準的散列容器。........................................................................... 91
4 迭代器..............................................................................................................95
第26 條:iterator 優先於const_iterator、reverse_iterator 及const_reverse_iterator。.....95
第27 條:使用distance 和advance 將容器的const_iterator 轉換成iterator。............ 98
第28 條:正確理解由reverse_iterator 的base()成員函數所産生的iterator 的用法。.... ...................... 101
第29 條:對於逐個字符的輸入請考慮使用istreambuf_iterator。......................... 103
5 算法...............................................................................................................................106
第30 條:確保目標區間足夠大。....................................................................... 107
第31 條:瞭解各種與排序有關的選擇。................................................................110
第32 條:如果確實需要刪除元素,則需要在remove 這一類算法之後調用erase。...........115
第33 條:對包含指針的容器使用remove 這一類算法時要特彆小心。.....................118
第34 條:瞭解哪些算法要求使用排序的區間作為參數。.................................. 121
第35 條:通過mismatch 或lexicographical_compare 實現簡單的忽略大小寫的字符
串比較。.................................................................. 124
第36 條:理解copy_if 算法的正確實現。............................................................. 128
第37 條:使用accumulate 或者for_each 進行區間統計。.................................... 130
6 函數子、函數子類、函數及其他...........................................................................135
第38 條:遵循按值傳遞的原則來設計函數子類。..................................... 135
第39 條:確保判彆式是“純函數”。................................................................. 138
第40 條:若一個類是函數子,則應使它可配接。............................................... 141
第41 條:理解ptr_fun、mem_fun 和mem_fun_ref 的來由。................................. 145
第42 條:確保less<T>與operator<具有相同的語義。........................................ 148
7 在程序中使用STL ..............................................................................................152
第43 條:算法調用優先於手寫的循環。................................................................. 152
第44 條:容器的成員函數優先於同名的算法。........................................................ 159
第45 條:正確區分count、find、binary_search、lower_bound、upper_bound 和
equal_range。....... ...................... 161
第46 條:考慮使用函數對象而不是函數作為STL 算法的參數。.................................. 168
第47 條:避免産生“直寫型”(write-only)的代碼。................................................ 172
第48 條:總是包含(#include)正確的頭文件。................................................. 175
第49 條:學會分析與STL 相關的編譯器診斷信息。..................................... 176
第50 條:熟悉與STL 相關的Web 站點。........................................................... 183
參考書目........................................................................................189
附錄A 地域性與忽略大小寫的字符串比較.................................................193
附錄B 對Microsoft 的STL 平颱的說明..........................................202
· · · · · · (
收起)