vector的几种初始化和遍历
程序员文章站
2022-03-21 22:16:34
...
原文地址: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赋予初值。
举个例子:
- 当数组元素数量有限时
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
以上是个人总结,由于我的水平有限,欢迎大家拍砖和指正,哈哈。