vector 有稱為容器。頭文件:#include<vector> ;using聲明:using std::vector; vector是一個類模板,可用於多個不同的數據類型。
注解:vector是一個類模板,而不是一個數據類型。
1. vector對象的定義和初始化
vector<int> v1; //默認構造函數初始v1為空
vector<int> v2(v1); //v1的副本
vector<int> v3(5,12); //包含5個值為12 的元素
vector<int> v4(3); //包含值初始化的元素的3個副本
關鍵概念:vector對象的動態增長
可在運行時高效地添加元素。雖然可預先分配內存,當更有效的方法是先初始化一個空的vector對象,然後再動態地增加元素。
如果vector保存內置類型,將用0值初始化;如果是類類型,將調用默認構造函數。
2.vector對象的操作
//1.size()和empty(),與string類似
if(v3.empty() == false)
{
vector<int>::size_type vs = v3.size();
cout<<"v3 size: "<<vs<<endl;
}
添加元素到vector對象後面:
int n ;
while(cin>>n)
{
v2.push_back(n);
}
下標操作:
for(vector<int>::size_type ix = 0;ix!=v3.size();ix++)
{
if(ix%2==0)
{
v3[ix] = 18 ;
}
cout<<v3[ix]<<" ";
}
關鍵概念:安全的泛型編程
上例中for循環判斷條件用!=而不是用<來判斷,沒有在for循環之前就調用size函數並保存其值,而是在for語句頭中調動size成員函數。
c++程序員習慣於優先使用!=而不是<來判斷。調用 size成員函數而不是保存其返回值是個良好的編程習慣。在C++中,有些數據結構是動態增長的,循環可以很容易地增加新元素,若確實增加了,那麼用已保存的size值作為循環條件就會有問題,應為沒有將新加入的元素計算在內。所以傾向於在每次循環中測試size的當前值。
可能會覺得每次調用size函數對性能的影響,C++中的有些函數可以聲明為inline函數。像size這樣的小庫函數都可以定義為內聯(inline)函數,所以每次循環過程中調用它的運行是代價是比較小的。
僅能對已存在的元素進行下標操作。