C++的vector對象


C++的vector使用

標簽(空格分隔): C++


標准庫類型vector表示對象的集合,其中所有對象的類型都相同。集合中的每個對象都有一個與之對應的索引,索引用於訪問對象,因為vector容納着其他的對象,所以也稱之為容器

要使用vector需要先包含對應的頭文件:

#include <vector>

vector也是一個類模板,所以要聲明vector對象時和其他的模板一樣:

vector<int> iVec;               // iVec保存int類型的對象
vecotr<vector<string>> sVec;    // sVec保存vector對象

定義和初始化vector對象

vector<T> vec;                      // vec是一個空的vector,他能接受的類型為T,執行默認初始化
vector<T> vec2(vec);                // vec2中包含vec所有元素的副本
vector<T> vec2 = vec;               // 等價於vec2(vec);
vector<T> vec(n, val);              // vec包含了n個重復的元素,每個元素的值都是val
vector<T> vec2(n);                  // vec2包含n個重復的執行了T的初始化的對象
vector<T> vec{a, b, c};             // vec包含了a, b, c
vector<T> vec = {a, b, c};          // 等價於vec{a, b, c}

這里要注意vec(n)vec{n}的區別:

vector<int> vec(10);                // vec有10個元素,每個值都是0
vecotr<int> vec{10};                // vec有1個元素,該元素的值是10

向vector對象中添加元素

push_back()負責把一個值當成vector對象的尾元素壓倒對象的最后。例如:

vector<int> vec;
for (int i = 0; i != 100; i++) {
    vec.push_back(i);
}               // 循環結束后vec中100個元素,值從0到99

然而在通過循環向vector中添加元素的時候,最好不要使用for...in...循環,因為添加使得vec.end()失效,使用for...in...循環不能正常工作。

訪問vector中的元素

既然vector是一個集合容器,那我們就可以通過便利的方式去一個一個的訪問元素:

vector<int> vec{1, 2, 3, 4, 5, 6};
for (auto &i:vect) {
    i *= i;
}                       // 將vec中的每個元素平方
int sum = 0;
for (auto i:vec) {
    sum += i;
}                       // 計算vec元素之和

當然也可以使用下標去訪問對象:

for (decltype(v.size()) i = 0, size = v.size(); i != size; i++) {
    v.push_back(v[i]);
}                       // 通過循環把vec的元素拷貝一份到原來的元素后面。

其他vector操作

除了添加元素用的push_back()之外,vector還提供了幾種其他操作,大多都和string的相關操作類似。

vec.empty();
vec.size();
vec.push_back(t);
vec[n];
vec1 = vec2;
vec = {a, b, c};
vec1 == vec2;                   // vec1和vec2相等當且僅當他們的元素數量相同且對應位置的元素都相同
vec1 != | < | <= | > | >= vec2;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM