c++中vector的一些基本操作
阿新 • • 發佈:2019-02-17
在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物件不可以以下標形式來新增元素,只可以對已經存在的元素進行下標操作。