隨着C++11標准的出現,vector出現了新的初始化和遍歷用法,但是vs2010和較高版本並沒有能完全支持C++11標准,所以我就將它的所有的用法歸納了一下。
vector的初始化
vector基本初始化如下:
vector< T >v1 v1是一個空的vector
vector< T >v2(v1) v2包含v1所有元素,等價於vector v2=v1;
vector< T >v3(n,val) v3包含了n個重復元素,每個元素是val
在C++11標准中出現了下面兩種新的初始化方式
vector< T > v4{a,b,c……} v4中每個元素被賦了相應的值
vector< T > v4={a,b,c……..} 這個和上面初始化形式一樣,和數組初始化形式相似
由於目前完全支持C++11標准的編譯器不多,當要對vector賦予不同初值的時候,我們就需要借助數組的形式來給vector賦予初值。 (也就是以下的方式是c++ 11之前經常采用的方式)
舉個例子:
1.當數組元素數量有限時
int arr[]={0,1,2,3,4,5}; vector< int > ivec(arr,arr+6);
2.當數組元素數量很多時
int arr[]={0,1,2,3,4..........}; size_t cnt=sizeof(arr)/sizeof(int); vector< int > ivec(arr,arr+cnt);
或者運用下面形式
int arr[]={0,1,2,3,4..........}; vector< int > ivec(begin(arr),end(arr));
這個形式在VS2010中可以使用,它采用C++11的標准。
如果是字符串數組,只需要將int換成string即可,再加上相應賦值
例如:
string arr[]={"a","b".........} vector< string > ivec(begin(arr),end(arr));
好了vector的初始化完成了,接着是vector的遍歷了;
vector遍歷
vector的遍歷一般使用迭代器
int arr[]={1,2,3,4........}; vector< int > ivec(begin(arr),end(arr)); for(auto it=ivec.begin();it!= ivec.end();++it)
或者采用
int arr[]={1,2,3,4........}; vector< int > ivec(begin(arr),end(arr)); vector<int>::iterator it; for(it=ivec.begin();it!= ivec.end();++it)
還可以for_each來遍歷vector形式,如下:
int arr[]={1,2,3,4........}; vector< int > ivec(begin(arr),end(arr)); for_each(ivec.begin(),ivec.end(),printf); //printf是一個函數 void printf(int a) { }
它還可以像數組一樣去遍歷
int arr[]={1,2,3,4}; vector< int > ivec(begin(arr),end(arr)); for(decltype(ivec.size()) i=0;i<4;++i)