std::array-數組

該結構適用於查、改操作;不適用於交換、刪除、增加數據的操作;其性能、速度與原始數組相差無幾。

常用函數

  1. begin()
  2. end()
  3. empty()
  4. front() //返回第一個元素值
  5. back() //返回最後一個元素值

std::list-雙向鏈表

該結構適用任何地方插入和刪除;隨機訪問比較慢。

常用函數

  1. back() //返回最後一個元素
  2. front() // 返回第一個元素
  3. begin() //返回指向第一個元素的迭代器
  4. end() //返回末尾的迭代器
  5. rbegin() //返回指向第一個元素的逆向迭代器
  6. rend() //指向list末尾的逆向迭代器
  7. pop_back() //刪除最後一個元素
  8. pop_front() //刪除第一個元素
  9. push_back() //在list的末尾添加一個元素
  10. push_front() //在list的頭部添加一個元素
  11. empty()
  12. erase() //刪除一個元素
  13. max_size() //返回list能容納的最大元素數量
  14. merge() // 合併兩個list
  15. remove() //從list刪除元素
  16. resize() // 改變list的大小
  17. reverse() // 把list的元素倒轉
  18. sort() // 給list排序
  19. splice() // 合併兩個list
  20. swap() //交換兩個list
  21. unique() //刪除list中重複的元素

std::forward_list-前向鏈表

在鏈表的任何位置(除尾部不能插入和刪除)進行插入/刪除操作都非常快;只能從頭到尾遍歷,不能從尾部開始遍歷(不提供size()成員函數;不支持反向迭代器,比如rbegin()等成員函數;不提供back()、push_back()和pop_back())。

常用函數

  1. push_front()
  2. pop_front()
  3. emplace_front() //頭部添加元素
  4. front()
  5. empty()

std::queue-隊列

該結構特點是先進先出;隊尾添加數據,隊頭刪除數據;不適用於查找數據。

常用函數

  1. push() //隊尾添加元素
  2. pop() //刪除隊頭元素
  3. front() //返回隊頭元素(非刪除隊頭元素)
  4. back() //返回隊尾元素(非刪除隊尾元素)

std::deque-雙端隊列

該結構是隊頭隊尾都可以添加刪除數據。

常用函數

  1. begin()
  2. end()
  3. size()
  4. resize()
  5. empty()
  6. at()
  7. front()
  8. back() //返回尾元素
  9. push_back() //尾部添加元素
  10. push_front() //首部添加元素
  11. pop_front() //尾部刪除元素
  12. pop_front() //首部刪除元素
  13. insert()
  14. erase() //刪除元素
  15. swap() //交換兩個容器的內容
  16. clear()
  17. emplace_front() //c++11首部添加元素
  18. emplace_back() //c++11尾部添加元素

std::priority_queue-優先隊列

常用函數

  1. push()
  2. pop()
  3. top() //隊頭元素

std::vector-動態數組

該結構用於尾部插入和刪除的情況;中間和頭部插入比較麻煩。

常用函數

  1. push_back() //尾部插入
  2. pop_back() //刪除尾部元素
  3. insert() //插入數據

std::stack-棧

該結構特點是後進先出。

常用函數

  1. size() //元素個數
  2. top() //返回棧頂元素
  3. pop() //刪除棧頂元素
  4. push() //添加元素
  5. empty()

std::bitset-固定長度位序列的抽象

該結構是一種類似數組的結構,它的每一個元素只能是0或1,每個元素僅用1bit空間。

常用函數

  1. count() //計算bitset中1的個數
  2. size()
  3. test() //test(1) 檢測bitset第一位是否為1
  4. any() //bitset中是否有1
  5. none() //bitset是否沒有1
  6. all() //bitset是否全為1

std::map

該結構的內部是紅黑樹(具有對數據自動排序的功能);可以存儲任意類型的數據,包括使用者自定義的數據類型;關鍵字(key),只能在map中出現一次,第二個稱該關鍵字值(value)。

常用函數

  1. find() //若存在則返回該元素的迭代器,否則返回end()
  2. count() //返回指定元素出現的次數
  3. erase() //刪除元素

std::multimap

該結構主要用於一個key值對應多個value的情況,即允許重複的元素。

常用函數

  1. clear()
  2. count() //返回一個元素出現的次數
  3. find() //查找元素
  4. erase() //刪除元素
  5. insert() //插入元素
  6. swap() //交換multimap

std::unordered_map

該結構內部是哈希表(存儲元素沒有進行排序),根據key查找單個value時非常高效;查詢單個key的時候效率比map高,但是要查詢某一範圍內的key值時比map效率低。

常用函數

  1. [] //操作符來訪問key值對應的value值
  2. emplace() //插入元素
  3. insert()

std::unordered_multimap

std::set

該結構是關鍵字即值,即只保存關鍵字的容器。

常用函數

  1. begin(); // 返回指向第一個元素的迭代器
  2. end(); // 返回指向最後一個元素的迭代器
  3. clear(); // 清除所有元素
  4. count(); // 返回某個值元素的個數
  5. empty(); // 如果集合為空,返回true
  6. equal_range(); //返回集合中與給定值相等的上下限的兩個迭代器
  7. erase() //刪除集合中的元素
  8. find() //返回一個指向被查找到元素的迭代器
  9. get_allocator() //返回集合的分配器
  10. insert() //在集合中插入元素
  11. lower_bound() //返回指向大於(或等於)某值的第一個元素的迭代器
  12. key_comp() //返回一個用於元素間值比較的函數
  13. max_size() //返回集合能容納的元素的最大限值
  14. rbegin() //返回指向集合中最後一個元素的反向迭代器
  15. rend() //返回指向集合中第一個元素的反向迭代器
  16. size() //集合中元素的數目
  17. swap() //交換兩個集合變數
  18. upper_bound() //返回大於某個值元素的迭代器
  19. value_comp() //返回一個用於比較元素間的值的函數

std::multiset

std::unordered_set

std::unordered_multiset


boost::dynamic_bitset

vector<bool>可以動態增長,但不能方便地進行位運算;bitset可以方便的進行二進位位運算,但不能動態增長。dynamic_bitset提供豐富的位運算,同時長度動態可變。

常用函數

  1. resize() //調整容器大小
  2. test() //檢測第n位是否為1
  3. any() //檢測容器中是否有1
  4. none() //檢測容器中是否沒有1
  5. count() //檢測容器中1的個數
  6. set() //置全部或特定位置為1或0
  7. reset() //置全部或特定位置為0
  8. flip() //反轉全部或特定位置的值

boost::bimap

c++提供的映射型容器map和multi_map,把一個key映射到value,但是這種映射關係是單向的,不能反過來,bimap提供雙向映射的能力;對於bimap<X,Y>存在左視圖和右視圖。bimap.left相當於map<X,Y>,bimap.right相當於map<Y,X>;key/value值對必須為唯一的,插入任何一個重複的都是無效的。

常用函數

bimap<int,int> bimap_;

  1. bimap.left.insert(make_pair(1,2)); //數據的插入

boost::circular_buffer-循環緩衝區

該結構支持標準的容器操作(pushback),但大小固定,當到達容器尾將自動重用最初的空間;實現了一個大小固定的循環隊列,就像deque和stack的混合體,可以像普通雙端隊列那樣執行pushback(),pushfront(),insert()等,也可像棧一樣用pop_back(),pop_front()刪除元素。

常用函數

  1. push_back()
  2. push_front()
  3. pop_back()
  4. pop_front()

boost::tuple

該結構是一個有固定數目元素的容器,每個元素類型可以不同;類似pair,只是裡面的元素更多,可將pair可以看作tuple的特例,tuple是pair的泛化。

常用函數

  1. get<num>() //得到某個位置的值
  2. make_tuple()

boost::any

該結構只能容納一個元素,但是這個元素可以是任意類型(int、float、string、stl容器、任何自定義類型)。

常用函數

  1. anycast<>() //any a(10); int n=any_cast<int>(a);

boost::variant

該結構是枚舉類型,但其元素可以string、vector等複雜類型;與any的區別,variant是有界類型,元素類型範圍由用戶指定,any是無界類型,可以容納任意的類型。

boost::multi_array-多維數組

該結構實現了stl風格的多維數組,比使用原始多維數組、vector<vector>更好。

boost::property_tree-樹形數據結構

多個屬性值的樹形數據結構,可以類似路徑的簡單方式訪問任意節點的屬性,而每個節點都可以用類似stl的風格遍歷子節點,特別適用於應用程序的配置數據處理,可以解析xml、ini、json、info四種格式的文本數據。

推薦閱讀:

相关文章