容器
- 條款1: 仔細選擇你要的容器
- 條款2: 小心對“容器無關代碼”的幻想
- 條款3: 使容器裏對象的拷貝操作輕量而正確
- 條款4: 用empty來代替檢查size是否爲0
- 條款5: 儘量使用範圍成員函數代替他們的單元素兄弟
- 條款6: 警惕C++的及其令人惱怒的分析
- 條款7: 當使用new得指針的容器時,切記在容器銷燬前delete那些指針
- 條款8: 千萬不要把auto_ptr放入容器中
- 條款9: 小心選擇刪除選項
- 條款10: 當心allocator的協定和約束
- 條款11: 瞭解自定義allocator的正統使用法
- 條款12: 對STL容器的線程安全性的期待現實一些
vector和string
- 條款13: 儘量使用vector和string來代替動態申請的數組
- 條款14: 用reserve來避免不必要的內存重新分配
- 條款15: 當心string的實現中的變化
- 條款16: 如何將vector和string的數據傳給傳統的API
- 條款17: 用“交換技巧”來修正過度的容量
- 條款18: 避免使用vector<bool>
關聯容器
- 條款19: 瞭解相等和等價的區別
- 條款20: 爲包含指針的關聯容器指定比較類型
- 條款21: 永遠讓比較函數對相等的值返回false
- 條款22: 避免對set和multiset的鍵值進行修改
- 條款23: 考慮用排序的vector代替關聯容器
- 條款24: 當效率很關鍵時儘量用map::insert代替map::operator
- 條款25: 讓自己熟悉非標準的hash容器
迭代器
- 條款26: 儘量使用iterator代替const_iterator,reverse_iterator和const_reverse_iterator
- 條款27: 使用distance和advance把const_iterators轉化成iterators
- 條款28: 瞭解如何通過reverse_iterator的base得到iterator
- 條款29: 需要一字符一字符輸入時請用istreambuf_iterator
算法
- 條款30: 確保目的範圍足夠大
- 條款31: 瞭解你的排序選項
- 條款32: 如果你真的想刪除東西的話在remove-like的算法後緊接上erase
- 條款33: 當心在包含指針的容器使用remove-like的算法
- 條款34: 注意哪些算法需要排序過的範圍
- 條款35: 通過mismatch或lexicographical_compare實現簡單的忽略大小寫字符串比較
- 條款36: 用not1和remove_copy_if來表現copy_if
- 條款37: 用accumulate或for_each來統計序列
仿函數,仿函數類,函數等等
- 條款38: 把仿函數類設計成值傳遞的
- 條款39: 用純函數做predicate
- 條款40: 增強仿函數類的適應性
- 條款41: 明確ptr_fun, mem_fun和mem_fun_ref的區別
- 條款42: 保證less是operator<的意思
用STL編程
- 條款43: 儘量用算法調用代替手寫循環
- 條款44: 儘量用成員函數代替同名的算法
- 條款45: 注意count、find、binary_search、lower_bound、upper_bound和equal_range的區別
- 條款46: 考慮用函數對象代替函數作爲算法的參數
- 條款47: 避免產生只寫代碼
- 條款48: 總是#include適當的頭文件
- 條款49: 學會破解STL相關的編譯器出錯信息
- 條款50: 讓自己熟悉STL相關的網站