博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++:关于vector
阅读量:4330 次
发布时间:2019-06-06

本文共 1529 字,大约阅读时间需要 5 分钟。

1. vector的初始化。

C++ primer列出了几种初始化vector对象的方式:

①vector<T> v1;

②vector<T> v2(v1); v2初始化为v1的一个副本。

③vector<T> v3(n,i); v3包含n个值为i的元素。

④vector<T> v4(n); v4含有值初始化的元素的n个副本。

另外,vector可以这样初始化:

vector
ivec{ 1,2,3 }; vector
ivec2 = { 1,2,3 };

vector也可以这样初始化:

int an_array[] = { 5,6,7,8 };vector
an_vector(an_array, an_array + 4);

用已存在的数组元素来初始化vector。传给vector的an_array和an_array+4(指针作为数组的迭代器)指示把范围 [an_array,an_array+4)内的元素用来初始化an_vector。注意an_array+4中的4是数组an_array的长度,而an_array+4是超出末端迭代器。这样an_vector的元素初始化为an_array的副本。

也可以只取数组中一部分用来初始化an_vector:

int an_array[] = { 5,6,7,8 };vector
an_vector(an_array + 1, an_array + 3);//an_vector:{6,7}

则an_vector初始化得到两个元素,6和7。

可以用数组的迭代器初始化vector,当然也可以用已经存在的vector初始化vector:

vector
an_vector1{ 2,3,4,5,6 };vector
an_vector2(an_vector1.begin(), an_vector1.end());

这样an_vector2初始化为an_vector1的一个副本。同样也可以只取an_vector1部分元素:

vector
an_vector1{ 2,3,4,5,6 };vector
an_vector2(an_vector1.begin() + 1, an_vector1.begin() + 4);

则an_vector2={3,4,5}。

除了可以用vector迭代器指定部分元素来初始化新的vector,也可以用set的迭代器来初始化vector:

set
an_set1{ 2,3,4,5,6 };vector
an_vector2(an_set1.begin(), an_set1.end());

这样也是合法的。

但是由于set并没有定义+和-操作,所以没有办法用set.iterator+n的方式获取某范围内的元素,比如这样

set<int> an_set1{ 2,3,4,5,6 };

vector<int> an_vector2(an_set1.begin()+1, an_set1.end());

这样的操作是错误的。不过set定义了迭代器的自加++和自减++,所以还是可以用迭代器遍历set元素。

转载于:https://www.cnblogs.com/us4ever/p/5359950.html

你可能感兴趣的文章
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>