vector(向量容器),是 C++ 中十分實用一個容器。vector 之所以被覺得是一個容器,是由於它可以像容器一樣存放各種型別的物件,簡單地說,vector 是一個可以存放隨意型別(型別可以是int, double, string, 還可以是類)的動態陣列,可以新增和壓縮資料。
使用 vector 之前。必須包括對應的標頭檔案,vector 屬於 std 命名域的,因此須要通過命名限定:
#include <vector>
using std::vector; //using namespace std;
vector 物件的定義和初始化
vector<int> a; //建立一個int型別的空的vector物件,沒有不論什麼元素
vector<int> b(a); //b 是 a 的副本
vector<string> str(10, "mike"); //10個str,每一個的內容都是"mike"
vector<int> c(10); //建立10個int型別vector物件。相當於c[10],每一個元素的值默覺得0
vector 物件經常使用操作
使用示比例如以下:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
//using namespace std;
int main( )
{
vector<int> a(10); //建立10個int型別vector物件。相當於c[10],每一個元素的值為0
//推斷 a 是否為空
if( true == a.empty() ){
cout << "it is empty\n";
}else if(false == a.empty() ){ //結果不為空
cout << "it is not empty\n";
}
//返回 a 中元素的個數。
cout << "size = " << a.size() << endl; // 結果為10
// 在 a 的末尾新增一個值為 5 的元素。
// 本來有10個元素。再加入一個。變為11個
a.push_back(5);
//下標操作元素。有11個元素。0~10
//列印最後一個元素
cout << a[a.size() -1] << endl; //結果為 5
// 下標法,把全部元素的值列印出來
// vector<int>::size_type 能夠當做 int 使用
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << a[i] << ", ";
}
cout << endl;
cout << "size before pop_back = " << a.size() << endl;
a.pop_back(); //刪除容器最後位置處的元素
cout << "size after pop_back = " << a.size() << endl;
// 下標法,給全部元素賦值
for(vector<int>::size_type i = 0; i != a.size(); i++){
a[i] = 5;
}
cout << "it is a:\n";
// 把 a 全部元素的值列印出來
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << a.at(i) << ", ";
}
cout << endl;
vector<int> b = a; //b是a的複製品
cout << "it is b:\n";
// 把 b 全部元素的值列印出來
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << b[i] << ", ";
}
cout << endl;
a.clear(); //清除全部元素
cout << "size after clear = " << a.size() << endl;
return 0;
}
執行結果例如以下:
迭代器操作 vector 物件
除了使用下標來訪問 vector 物件的元素外。標準庫還提供了還有一種訪問元素的方法:使用迭代器(iterator) 。迭代器是一種檢查容器內元素並遍歷元素的資料型別。實際上,vector 物件相當於陣列,而迭代器就相當於指標。
每種容器型別都定義了自己的迭代器型別,如 vector:
vector<int>::iterator iter;
使用示比例如以下:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
//using namespace std;
int main( )
{
vector<int> v(10, 5); //有10個元素,每一個元素的值都是5
//通過迭代器把全部元素的值列印出來
vector<int>::iterator it;
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
//通過迭代器給全部元素賦值為1
for( it=v.begin(); it!=v.end(); it++){
*it = 1;
}
cout << endl;
//通過迭代器把全部元素的值列印出來
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
it = v.begin(); //返回指向容器最開始位置元素的指標(迭代器)
//刪除指標it+1指向位置的元素,返回指向下一個元素位置的指標(迭代器)
v.erase(it+1);
cout << endl << "after erase:\n";
//通過迭代器把全部元素的值列印出來
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
it = v.begin();
//在位置it後插入3個5
v.insert(it, 3, 5);
cout << endl << "after insert:\n";
//通過迭代器把全部元素的值列印出來
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
return 0;
}
執行結果例如以下: