vector的几种初始化和遍历

来源:互联网 发布:潘安传奇网络电影 编辑:程序博客网 时间:2024/06/06 16:27

原文地址:http://blog.csdn.net/u011543018/article/details/50724883

随着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赋予初值。 
举个例子:

  1. 当数组元素数量有限时
int arr[]={0,1,2,3,4,5};vector< int > ivec(arr,arr+6);
  • 1
  • 2
  • 1
  • 2

2.当数组元素数量很多时

int arr[]={0,1,2,3,4..........};size_t cnt=sizeof(arr)/sizeof(int);vector< int > ivec(arr,arr+cnt);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

或者运用下面形式

int arr[]={0,1,2,3,4..........};vector< int > ivec(begin(arr),end(arr));
  • 1
  • 2
  • 1
  • 2

这个形式在VS2010中可以使用,它采用C++11的标准。

如果是字符串数组,只需要将int换成string即可,再加上相应赋值 
例如:

string arr[]={"a","b".........}vector< string > ivec(begin(arr),end(arr));
  • 1
  • 2
  • 1
  • 2

好了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)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

或者采用

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)
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

还可以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){}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

它还可以像数组一样去遍历

int arr[]={1,2,3,4};vector< int > ivec(begin(arr),end(arr));for(decltype(ivec.size()) i=0;i<4;++i)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

遍历基本上也就是这些了。 
现在我们通过下面一个例子来了解下:

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;void work(string ivec)  {    cout<<ivec<<" ";}int main(){    string a[]={"a","b","c","d","e"};    //用数组初始化    //vector<int> ivec(begin(a),end(a));    //vector<int> ivec(a,a+7);    size_t  cnt=sizeof(a)/sizeof(string);    vector<string> ivec(a,a+cnt);    vector<string>::iterator it;    for( it=ivec.begin();it!=ivec.end();++it)    {        cout<<*it<<" ";    }    cout<<endl;    ivec[3]="m";    cout<<ivec[3]<<endl;    for_each(ivec.begin(),ivec.end(),work);    system("pause");    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

这里写图片描述

以上是个人总结,由于我的水平有限,欢迎大家拍砖和指正,哈哈。

原创粉丝点击