1. 程式人生 > >c++中vector的一些基本操作

c++中vector的一些基本操作

在c++中,vector是一個類模板,當使用模板的時候,我們需要指出編譯器應該把類和函式例項化成何種型別。
比如:

vector<int> ivec;
vector<sales_item> Sales_vec;
vector<vector<string>> file;//該向量的元素是vector物件

1定義和初始化vector物件

vector<T> v1;//v1是一個空vector,它潛在的元素是T型別的,執行預設初始化
vector<T> v2(v1);//v2中包含v1所有元素的副本
vector<T>
v2=v1;//等價於v2(v1),v2中包含有v1所有元素的副本 vector<T> v3(n,val);//v3中包含著n個重複的元素 vector<T> v4(n);//v4包含了n個重複執行值初始化的物件 vector<T> v5{a,b,c...};//v5包含了初始值個數的元素,每個元素被賦予相應的初始值 vector<T> v5={a,b,c};//等價於上一個

其中,v4初始化時元素的型別必須支援預設初始化,我們就必須提供初始化的元素值。
2列表初始化

vector<string> v5{"hi"};//列表初始化:v5有一個元素
vector<string> v6("hi");//錯誤,不可以用元素值來構建vector物件 vector<string> v7{10};//v7有10個預設初始化的元素 vector<string> v8{10,"hi"};//v8有10個值為hi的元素

花括號裡的值必須和元素型別相同,顯然10並不是string型別,此時編譯器會嘗試用預設初始化來初始化vector物件
3向vector物件中新增元素
當向vector裡新增總量較大的數時,我們就可以使用push_back操作,可以向其末尾新增元素,

vector<int> v2;
for(int i=0
;i!=100;++i) { v2.push_back(i); }

有時不知道確切的元素數量,需要實時讀取資料然後將其賦予vector物件。

string word;
vector<string> text;
while(cin>>word)
     text.push_back(word);

c++標準要求vector元素能夠快速的增長,開始的時候建立空的物件,然後再執行時動態地新增元素,這樣的效率會更加的高。
範圍for語句中不可以改變其遍歷序列的大小
4其他的vector操作

//vector支援的操作
v.empty();//vector為空的時候返回真
v.size();//返回v中元素的個數
v.push_back;//向v的尾端新增一個值為t的元素
v[n];//返回第n個元素
v1=v2;//用v2元素中的拷貝替換v1中的元素
v1={a,b,c..}//用列表中的元素拷貝替換v1的元素
v1==v2;
v1!=v2;
<,<=,>,>=;//以字典順序比較大小

訪問vector物件中元素的方法和訪問string物件中字元的方法差不多,例如可以使用範圍語句處理vector物件中所有的元素

vector<int> v{1,2,3,4,5,6,7,8,9};
for(auto &i:v)
    i*=i;//i 時一個引用,求元素的平方值
for(auto i:v)
    cout<<i<<" ";//輸出該元素
cout<<endl;

第一個迴圈把控制變數i定義成引用型別,這樣就能通過i給v的元素賦值,其中i的型別有auto關鍵字所指定。
注意:vector物件不可以以下標形式來新增元素,只可以對已經存在的元素進行下標操作。