Effective STL 目錄

容器

  • 條款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相關的網站

附錄A. 局部和忽略大小寫字符串比較

附錄B. 談談Microsoft的STL平臺

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章