vector的幾種初始化和遍歷


隨着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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM