1. 關于模版 -- 見前幾周筆記
注: 關于所說的 兩個 > (尖括號) 之間要有一個空格,否則編譯器會認為是流操作,但是現在編譯器基本上都支持寫在一起了,不必一定要加空格。
2. 關于迭代器(iterator)
- 迭代器是一個 “可遍歷 STL 容器全部或部分元素” 的對象。迭代器用來表現容器中的一個位置。
- 迭代器是容器與算法之間的接口。
- 各種迭代器的接口都相同,但是類型各不相同,也就是說,每種容器都有自己的迭代器。
3. 關于容器(containers)
- 容器用來管理一大群元素。為了適應不同需要,STL 提供了不同的容器。
stl 容器分類
2 . 關于順序容器
- 首先明白這是一種有序集合,其內每個元素均有確鑿的位置 -- 取決于插入實際和地點,與元素值無關。
2. vector -- 基本操作
vector 本身是將元素置于 dynamic array 中加以管理的一個抽象概念,使用之前必須包含頭文件 <vector>.
-
vector 的 迭代器
iterator -
vector 的能力
capacity -
元素訪問
元素訪問 -
更易性操作
操作
注:關于vector的各種操作,我認為最好的方法就是上一些專業網站直接查詢,上述圖片均來自于http://www.cplusplus.com/reference/vector/vector/ 關于 vector 對象是如何增長的
為了支持快速隨機訪問,vector 將元素連續存儲,每個元素緊挨著前一個元素;
容器必須分配新的內存空間來保存已有元素和新元素,將已有元素從舊位置移動到新空間中,然后添加新元素,釋放舊空間。為了避免每添加一個元素就分配一次,標準庫實現者采用了可以減少容器空間重新分配次數的策略。當不得不獲取新的內存空間是,vector 的實現通常會分配比新的空間需求更大的內存空間。
#include <iostream>
#include <vector>
using namespace std ;
int main()
{
vector <int> vi ;
int s, c ;
for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
vi.push_back(1);
cout << "空間: " << vi.capacity() << " 元素數: " << vi.size() << endl;
for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
vi.push_back(1);
cout << "空間: " << vi.capacity() << " 元素數: " << vi.size() << endl;
for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
vi.push_back(1);
cout << "空間: " << vi.capacity() << " 元素數: " << vi.size() << endl;
for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
vi.push_back(1);
cout << "空間: " << vi.capacity() << " 元素數: " << vi.size() << endl;
for(s = vi.size(), c = vi.capacity(); s <= c ; s++)
vi.push_back(1);
cout << "空間: " << vi.capacity() << " 元素數: " << vi.size() << endl;
return 0;
}
增長
注: 說明在此編譯器下是成倍增長空間的。
2. deque -- 基本操作
- 容器deque也采用 dynamic array 來管理元素,提供隨機訪問,并有著和 vector 幾乎一樣的接口, 不同的是,deque 頭尾都開放,因此能在頭尾兩端進行快速安插和刪除。
- deque 操作中與 vector 的不同:
- deque 不提供容量操作 (capacity() 和 reserve());
- deque 直接提供函數完成頭部元素的安插和刪除(push_back() he pop_back()).
- 除了at(), 沒有其他函數會檢測是否有效;
- deque 操作
iterator 和 capacity
element access 和 modifiers
注: 來源于 http://www.cplusplus.com/reference/deque/deque/?kw=deque
3. list
- list使用一個 doubly linked list 管理元素,使用是必須包含<list>;
- list對象自身提供兩個 pointer ,用來指向第一個和最末一個元素,每個元素都有pointer指向前一個和下一個元素。如果想要安插新元素,只需操縱對應的 pointer 即可。
- list 與 vector 和deque 的不同:
- . list 不支持隨機訪問;
- . 任何位置上執行元素的安插和移除都非常快;
- list 的操作
操作1
操作2
注:來源于http://www.cplusplus.com/reference/list/list/