vector(向量容器),是 C++ 中十分有用一個容器。vector 之所以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vector 是一個能夠存放任意類型(類型可以是int, double, string, 還可以是類)的動態數組,能夠增加和壓縮數據。
使用 vector 之前,必須包含相應的頭文件,vector 屬於 std 命名域的,因此需要通過命名限定:
#include
using std::vector; //using namespace std;
vectora; //創建一個int類型的空的vector對象,沒有任何元素 vector b(a); //b 是 a 的副本 vector str(10, mike); //10個str,每個的內容都是mike vector c(10); //創建10個int類型vector對象,相當於c[10],每個元素的值默認為0
使用示例如下:
#include#include using std::vector; using std::cout; using std::endl; //using namespace std; int main( ) { vector a(10); //創建10個int類型vector對象,相當於c[10],每個元素的值為0 //判斷 a 是否為空 if( true == a.empty() ){ cout << it is empty ; }else if(false == a.empty() ){ //結果不為空 cout << it is not empty ; } //返回 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 ::size_type 可以當做 int 使用 for(vector ::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 ::size_type i = 0; i != a.size(); i++){ a[i] = 5; } cout << it is a: ; // 把 a 所有元素的值打印出來 for(vector ::size_type i = 0; i != a.size(); i++){ cout << a.at(i) << , ; } cout << endl; vector b = a; //b是a的復制品 cout << it is b: ; // 把 b 所有元素的值打印出來 for(vector ::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 對象的元素外,標准庫還提供了另一種訪問元素的方法:使用迭代器(iterator) 。迭代器是一種檢查容器內元素並遍歷元素的數據類型。實際上,vector 對象相當於數組,而迭代器就相當於指針。
每種容器類型都定義了自己的迭代器類型,如 vector:
vector
::iterator iter;
使用示例如下:
#include#include using std::vector; using std::cout; using std::endl; //using namespace std; int main( ) { vector v(10, 5); //有10個元素,每個元素的值都是5 //通過迭代器把所有元素的值打印出來 vector ::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: ; //通過迭代器把所有元素的值打印出來 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: ; //通過迭代器把所有元素的值打印出來 for( it=v.begin(); it!=v.end(); it++){ cout<< *it << , ; } cout << endl; return 0; }