順序容器——vector
阿新 • • 發佈:2021-09-19
一、介紹
標準庫型別vector表示物件的集合,其中所有物件的型別相同。
集合中的每個物件都有一個與之對應的索引,索引用於訪問物件。
vector
是一個類模板,不是型別。由vector
生成的型別必須包含vector
中元素的型別,比如 vector<int>
。
要想使用vector
,必須包含適當的標頭檔案。如下:
# include <vector>
using std::vector;
vector
能容納絕大多數型別的物件作為其元素,但是因為引用不是物件,所以不存在包含引用的vector
。
二、定義和初始化vector
物件
操作 | 說明 |
---|---|
vector |
v1是一個空vector,它潛在的元素是T型別的,執行預設初始化 |
vector |
v2中包含有v1所以元素的副本 |
vector |
等價於v2(v1), v2中包含有v1所有元素的副本 |
vector |
v3包含了n個重複的元素,每個元素的值都是val |
vector |
v4包含了n個重複地執行了值初始化的物件 |
vector |
v5包含了初始值個數的元素,每個元素被賦予相應的初始值 |
vector |
等價於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語句。