vector的几种初始化和遍历
2016-02-23 19:05
447 查看
随着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赋予初值。
举个例子:
当数组元素数量有限时
2.当数组元素数量很多时
或者运用下面形式
这个形式在VS2010中可以使用,它采用C++11的标准。
如果是字符串数组,只需要将int换成string即可,再加上相应赋值
例如:
好了vector的初始化完成了,接着是vector的遍历了;
vector遍历
vector的遍历一般使用迭代器
或者采用
还可以for_each来遍历vector形式,如下:
它还可以像数组一样去遍历
遍历基本上也就是这些了。
现在我们通过下面一个例子来了解下:
以上是个人总结,由于我的水平有限,欢迎大家拍砖和指正,哈哈。
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赋予初值。
举个例子:
当数组元素数量有限时
[code]int arr[]={0,1,2,3,4,5}; vector< int > ivec(arr,arr+6);
2.当数组元素数量很多时
[code]int arr[]={0,1,2,3,4..........}; size_t cnt=sizeof(arr)/sizeof(int); vector< int > ivec(arr,arr+cnt);
或者运用下面形式
[code]int arr[]={0,1,2,3,4..........}; vector< int > ivec(begin(arr),end(arr));
这个形式在VS2010中可以使用,它采用C++11的标准。
如果是字符串数组,只需要将int换成string即可,再加上相应赋值
例如:
[code]string arr[]={"a","b".........} vector< string > ivec(begin(arr),end(arr));
好了vector的初始化完成了,接着是vector的遍历了;
vector遍历
vector的遍历一般使用迭代器
[code]int arr[]={1,2,3,4........}; vector< int > ivec(begin(arr),end(arr)); for(auto it=ivec.begin();it!= ivec.end();++it)
或者采用
[code]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形式,如下:
[code]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) { }
它还可以像数组一样去遍历
[code]int arr[]={1,2,3,4}; vector< int > ivec(begin(arr),end(arr)); for(decltype(ivec.size()) i=0;i<4;++i)
遍历基本上也就是这些了。
现在我们通过下面一个例子来了解下:
[code]#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; }
以上是个人总结,由于我的水平有限,欢迎大家拍砖和指正,哈哈。
相关文章推荐
- 互联网+企业行动指南(读书笔记)
- 结构体指针和结构体嵌套
- 错误:The request sent by the client was syntactically incorrect的解决
- 260. Single Number III
- Unity教程之-制作闪亮的星星Star(四):Unity Editor编辑器实现Undo
- 建行E商贸通支付开发系列之三(1、初识几种URL地址)
- Java 二叉树广度优先遍历
- 代码规范和Android项目中的一些可用工具
- 安卓Xutils3网络工具,注解工具,图片工具和日志工具的使用,以及对网络工具的封装
- bzoj 1066: [SCOI2007]蜥蜴
- Implement Queue using Stacks
- IOS-CoreAnimation(核心动画)
- cobbler基础配置
- Python导入matplotlib错误提示ImportError: matplotlib requires pyparsing
- Android学习历程14-Android ListView优化
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- URAL 1796. Amusement Park (math)
- paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
- Java 数组构建二叉树
- Qt对话框QDialog的返回值