1. 程式人生 > 其它 >順序容器——vector

順序容器——vector

一、介紹

標準庫型別vector表示物件的集合,其中所有物件的型別相同。

集合中的每個物件都有一個與之對應的索引,索引用於訪問物件。

vector是一個類模板,不是型別。由vector生成的型別必須包含vector中元素的型別,比如 vector<int>

要想使用vector,必須包含適當的標頭檔案。如下:

# include <vector>
using std::vector;

vector能容納絕大多數型別的物件作為其元素,但是因為引用不是物件,所以不存在包含引用的vector

二、定義和初始化vector物件

操作 說明
vector v1
v1是一個空vector,它潛在的元素是T型別的,執行預設初始化
vector v2(v1) v2中包含有v1所以元素的副本
vector v2 = v1 等價於v2(v1), v2中包含有v1所有元素的副本
vector v3(n, val) v3包含了n個重複的元素,每個元素的值都是val
vector v4(n) v4包含了n個重複地執行了值初始化的物件
vector v5{a, b, c...} v5包含了初始值個數的元素,每個元素被賦予相應的初始值
vector v5 = {a, b, c...} 等價於v5{a, b, c...}

三、新增元素

使用場景:先建立一個空vector

,然後在執行時再利用成員函式push_back向其中新增元素。

vector<int> v2;
for (int i = 0; i != 100; ++i) {
    v2.push_back(i);		// 依次把整數值放到v2的尾部
}

注意:範圍for語句內不應改變其所遍歷序列的大小。

四、其他操作

操作 說明
v.empty() 如果v不包含任何元素,返回真;否則返回假
v.size() 返回v中元素的個數
v.push_back(t) 向v的尾部新增一個值為t的元素
v[n] 返回v中第n個位置上元素的引用
v1 = v2 用v2中元素的拷貝替換v1中的元素
v1 = {a, b, c...} 用列表中元素的拷貝替換v1中的元素
v1 == v2 v1和v2相等當且僅當它們的元素數量相同且對應位置的元素值都相同
v1 != v2 與 v1 == v2相反
<<=>>= 以字典順序進行比較

遍歷vector中元素

vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
for (auto &i : v) {		// 對於v中的每一個元素,注意i是一個引用
    i *= i;				// 求元素值的平方
}
for (auto i : v) {
    cout << i << " ";	// 輸出該元素
}
cout << endl;

不能用下標形式新增元素

vector<int> ivec;		// 空vector物件
for (decltype(ivec.size()) ix = 0; ix != 10; ++ix) {
    ivec[ix] = ix;		// 嚴重錯誤:ivec中不包含任何元素
}

注意:vector物件的下標運算子可用於訪問已存在的元素,而不能用於新增元素。

確保下標合法的一種有效手段就是儘可能使用範圍for語句。