vector是標(biāo)準(zhǔn)庫中常見的一種容器,使用起來非常方便,可以用來代替c++原本的數(shù)組。
vector 的創(chuàng)建和初始化vector作為存放一串?dāng)?shù)據(jù)的容器,在創(chuàng)建和初始化的時(shí)候就要考慮數(shù)據(jù)類型、數(shù)據(jù)的個(gè)數(shù)以及數(shù)據(jù)的值,并且針對這幾個(gè)屬性就可以有幾種不同的初始化方式。
vector 的初始化
#include#includeusing namespace std;
//vector的初始化
int main()
{vectorvec1;
vectorvec2(3);
vectorvec3(3,'a');
vectorvec4(vec3);
return 0 ;
}
例子展示了幾種不同的vector的初始化方法。可以看到在4個(gè)vector的初始化中,用<>指定了vector中的不同元素類型。
<1>第一個(gè)是空的整形vector,我們沒有給他添加任何元素。
<2>第二個(gè)初始化了一個(gè)有3個(gè)元素的vector,由于并沒有指定初始 值,將會使用編譯器默認(rèn)的初始值。
<3>第三個(gè)初始化了含有3個(gè)a的字符vector,括號中第二個(gè)值代表著所有元素的指定值。
<4>第四個(gè)vector通過拷貝vec3中的元素初始化vec4,它們的元素會一模一樣。
注意:
由于vector是標(biāo)準(zhǔn)庫中的類,在使用vector的時(shí)候我們需要包含標(biāo)準(zhǔn)庫的頭文件< vector >.
在創(chuàng)建了vector之后,我們首先要進(jìn)行的操作是讀取元素的值并打印出來,這樣我們才能知道創(chuàng)建出的vector到底是什么樣的。
#include#includeusing namespace std;
//vector的遍歷
int main()
{vectorvec1;
vectorvec2(3);
vectorvec3(3,'a');
vectorvec4(vec3);
cout<< "vec1:"<< endl;
for (int i = 0; i< vec1.size(); i++ )
{cout<< vec1[i]<< "";
}
cout<< endl<< "vec2:"<< endl;
for ( int i = 0; i< vec2.size(); i++ )
{ cout<< vec2[i]<< "";
}
cout<cout<< vec3[i]<< "";
}
cout<< endl<< "vec4:"<< endl;
for (int i = 0; i< vec4.size() ; i++ )
{cout<< vec4[i]<< "";
}
cout<< endl;
return 0 ;
}
運(yùn)行結(jié)果為:
示例用4個(gè)循環(huán)遍歷了每個(gè)vector的每個(gè)元素,循環(huán)終止條件是i< vec.size(),這里的size()會返回vector的大小,或者說是元素個(gè)數(shù)。而再循環(huán)中,通過[i]來訪問vector 中索引為 i的元素。由于循環(huán)保證了 i一定有效,小于vector的大小,這里訪問vector元素就不會超出vector范圍,或者說是越界–這也是程序員在編程中經(jīng)常會犯而且不好調(diào)試的錯(cuò)誤。
從運(yùn)行結(jié)果中我們可以看到,第一個(gè)vector是空的,第二個(gè)vector的三個(gè)元素都是默認(rèn)值0,第四個(gè)vector由于使用了拷貝的方法,元素值與第三個(gè)vector一模一樣。
幾個(gè)vector的常用操作
向vector添加元素
#include#includeusing namespace std;
//向vector添加元素
int main()
{vectorvec1;
if ( vec1.empty() )
{cout<< "vec1 is empty!"<< endl;
}
vec1.push_back(1);
vec1.push_back(2);
if ( vec1.empty() )
{cout<< "vec1 is empty! "<< endl;
}
for (int i = 0;i< vec1.size(); i++ )
{cout<< vec1[i]<< endl;
}
return 0 ;
}
運(yùn)行結(jié)果為:
可以看到,empty()可以判斷vector是否為空,而push_back()每次會添加一個(gè)元素到vector的末尾,因此打印的時(shí)候會先打印第一個(gè)元素。
從vector移除元素
#include#includeusing namespace std;
//從vector移除元素
int main()
{vectorvec1(3,2);
for (int i =0;icout<< vec1[i]<<" ";
}
cout<cout<< vec1[i]<<" "<
運(yùn)行結(jié)果:
pop_back()和push_back()一樣,都是從vector末尾進(jìn)行尾行操作。pop_back()每次都會移除一個(gè)元素,因此調(diào)用兩次pop_back()后,vector只剩一個(gè)元素。需要注意的是,如果vector為空,使用pop_back()將會產(chǎn)生異常結(jié)果,因此需要empty()來確定vector不為空。
vector相等判斷與賦值
#include#includeusing namespace std;
//vector相等判斷與賦值
int main()
{vectorvec1(3,2);
vectorvec2;
if (vec1 == vec2)
{cout<< "vec1與vec2相等"<< endl;
}
vec2 = vec1;
cout<< "賦值后"<< endl;
if (vec1 == vec2)
{cout<< "vec1與vec2相等"<< endl;
}
return 0 ;
}
運(yùn)行結(jié)果:
vector的賦值會把一個(gè)vector所有的元素賦值到另一個(gè)vector中,并替代所有元素;而vector的相等也是需要逐個(gè)元素依次比較并全部相等才算相等。
如果本文對您有幫助請點(diǎn)贊支持一下~
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧