1. 程式人生 > >STL 容器總結(一)

STL 容器總結(一)

一、所有容器的共通操作
1、equality(==) 和 inequality(!=) 運算子, 返回 true 或者 false。
2、assignment(=) 運算子,將某個容器複製給另一個容器。
3、empty() 會在容器沒有任何元素的時候返回 true,否則 false。
4、size() 返回目前容器中持有元素的數目。
5、clear() 清除所有元素

二、 每個容器都提供了begin() 、end()、 insert()、 erase() 函式
1、begin() 返回一個 iterator,指向容器的第一個元素。
2、end() 返回一個iterator,指向容器的最後一個元素的下一個位置。
3、insert() 將單一或某個範圍內的元素插入容器內。
4、erase() 將容器內單一或某個範圍內的元素刪除。

三、 順序性容器

vector

1、vector 和 list 是最主要的兩個順序性容器。
2、vector 以一塊連續的記憶體來存放元素,對 vector 進行隨機訪問,比較有效率,vector 內的每個元素都被儲存在距離起始點的固定偏移位置上。如果將元素插入任意位置,而不是末端,那麼效率將很低,因為插入位置右端的每一個元素,都必須被複制一份,然後依次向右移動。同樣道理,刪除 vector 內最後一個元素以外的任意元素,同樣缺乏效率。

list

list 是雙向連結,而非連續記憶體來儲存內容,因此可以執行前進或者後退操作。list 中每個元素包含三個欄位:value、back 指標、front 指標。在 list 的任意位置插入和刪除都頗具效率,因為 list 本身只需設定 back 和 front 指標即可。如果對 list 進行隨機訪問的操作,則效率欠佳,因為每次訪問都必須遍歷介於其中的所有元素。

deque

deque 和 vector 行為比較相似,都以連續記憶體來儲存元素。和 vector 不同的是,deque 對於前端元素的插入和刪除效率更高,末端亦同。如果我們需要在容器前端插入元素,並執行末端的刪除操作,deque 比較理想。(標準庫的 queue 以 deque 作為底部儲存元素)

定義容器的方法

# 產生空的容器:
list<string> slist;
vector<int> ivec;

# 產生特定大小的容器:
list<int> ilist(1024);
vector<string> svec(32
); # 產生特定大小的容器,並制定初值: list<int> ilist(10, -11); vector<string> svec(12, "hello"); # 通過一對iterator產生容器: int ia[6] = {1, 2, 3, 4, 5, 6}; vector<int> ivec(ia, ia+6); # 複製容器 list<string> slist(1, "hello"); list<string> slist1(slist);

push_back() 會在末尾插入一個元素
pop_back() 會刪除末尾的最後一個元素
除此之外,list 和 deque (不包括 vector) 還提供了 push_front() 和 pop_front() 。
pop_back() 和 pop_front() 這兩個操作函式並不會返回被刪除的元素值。因此,如果要讀取最前端的元素,使用front() ,讀取末端元素,使用back() 。