標籤:stl 容器 函數 c++
一.序列和關聯非共有函數
所有標準庫共有函數 (構造,相關屬性,迭代器,插入與刪除,比較,swap)
其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不適用於priority_queue
順序容器和關聯容器共有函數
(1) 序列容器都提供5種相同的構造方法;關聯容器都提供3種相同的構造方法
(2) 還有insert插入函數(序列容器有3個相同版本的插入。關聯容器也有3個版本的)
(3) 序列容器提供2中相同的erase,關聯容器提供3種相同的erase。
(4) 屬性函數:除vector多了capacity()函數,其餘都是size,max_size,empty這3
二.非共有函數
(1)只有序列容器才有的函數
元素的訪問 ; 元素的賦值
(2) 只有關聯容器才有的函數
尋找
(3) 序列元素對首尾元素的插入,刪除與訪問
Vector
插入與刪除:push_back(),pop_back()
訪問:front,back(分別均有2個版本)
重要:為什麼沒有push_front,,但是卻有front,這是start迭代器的功勞
Deque,list
插入與刪除:push_back(),pop_back(),push_front,pop_front
訪問:同vector
Stack,queue
插入與刪除很明顯
訪問:queqe同vector。但是stack卻只有top(也即back),為什嗎?
Slist
插入與刪除:push_front與pop_front
訪問:front
(4) 只有序列容器才有的訪問之非頭尾的訪問
只有Vector與deque才可以,因為只有他們才提供了隨機訪問迭代器
1.[] (2種版本)
2.at(2種版本)
(5)只有序列容器才有的賦值
都一樣;assign(2個版本)
(6)
Vector和string既有reserve,也有resize,它們兩個可以利用reserve來避免不必要的重新分配。
由於deque沒必要提供所謂的空間保留功能(原因見STL源碼P143),所以其沒有reserve函數。同理,List也只提供resize函數
關聯容器不提供這兩個函數。
(7)list在序列容器中比較特殊
合并:merge(2個版本),splice(3個版本)
排序:sort(2個版本)
反轉
多了刪除:remove(2個版本),unique(2個版本)
(8)關聯容器特有的尋找
Set與multiset:find,lower_bound,upper_bound,equal_range,count,
Map與multimap:前4個函數還有一個非const版本
(9)
Vector和string既有reserve,也有resize,它們兩個可以利用reserve來避免不必要的重新分配。
由於deque沒必要提供所謂的空間保留功能(原因見STL源碼P143),所以其沒有reserve函數。同理,List也只提供resize函數
關聯容器不提供這兩個函數。