容器用於存放數據的類模板。可變長數組、鏈表、平衡二叉樹等數據結構在STL中都被實現爲容器
容器中可以存放基本類型的變量,也可以存放對象。對象或基本類型的變量被插入容器中時,實際插入的是對象或變量的一個複製品
STL中的許多算法(函數模版),如排序,查找等算法,在執行過程中會對容器中的元素進行比較。這些算法在比較元素是否相等時通常用運算符進行,比較大小通常用<運算符進行,因此,被放入容器的對象所屬的類最好重載==和<運算符,以使得兩個對象==和<進行比較是有定義的
容器分爲兩大類:
順序容器:
順序容器有三種:可變長動態數組Vector、雙端隊列deque、雙向鏈表list。
它們被稱爲順序容器是因爲元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置插入,元素就會位於什麼位置。
關連式容器:
關連式容器有四種:set、multiset、map、multimap。關連式容器內的元素是排序的。插入元素時,容器會按一定的排序規則將元素放到適當的位置上,因此插入元素時不能指定位置。
默認情況下,關連式容器中的元素是從小到大排序的而且用<運算符比較元素或關鍵字大小。
除了以上兩類容器外,STL還在兩類的基礎上屏蔽一部分功能,突出或增加另一部分功能,實現了三種容器適配器:棧stack,隊列queue、優先級隊列priority_queue
容器都是類模版。它們實例化後就成爲容器類。用容器類定義的對象稱爲容器對象
所有容器都有以下兩個成員函數:
int size():返回容器對象中元素的個數
bool empty():判斷容器對象是否爲空
順序容器都有以下兩個成員函數:
begin():返回指向容器中第一個元素的迭代器
end():返回指向容器中最後一個元素後面位置的迭代器
rbegin():返回指向容器中最後一個元素的反向迭代器。
rend():返回指向容器中第一個元素前面的位置的反向迭代器。
erase(...):從容器中刪除一個或幾個元素。
clear():從容器中刪除所有元素。
如果一個容器是空的,則 begin() 和 end() 的返回值相等,rbegin() 和 rend() 的返回值也相等
順序容器還有以下常用成員函數:
front():返回容器中第一個元素的引用。
back():返回容器中最後一個元素的引用。
push_back():在容器末尾增加新元素。
pop_back():刪除容器末尾的元素。
insert(...):插入一個或多個元素。