3.3标准库类型vector

标准库类型vector表示对象的集合,其中对象的类型均相同,vector也被称作容器。使用vector,必须包含如下头文件和using声明:

#include <vector>
using std::vector;

vector是C++中的类模板,编译器需要根据类模板和我们提供的参数创建对应的类,这一过程称作实例化。

  • C++中有类模板和函数模板
  • 提供给类模板的额外信息格式入下:
类模板名<额外信息> 

vector类模板需要提供的信息是vector中存放的对象的类型,如下

vector<int> ivec;
  • 这句话中vector根据类模板生成了一个存放int对象的vector类型
  • 然后定义了一个存放int对象的vector类型的对象ivec
  • vector可以包含大多数类型作为其元素,但引用不是对象,因此vector不能包含引用
  • vector可以包含vector
vector<vector<int>> //新版c++写法
vector<vector<int> >  //老版c++要求右面的两个>>中间有一个空格

一、定义和初始化类型为T的vector

vector<T> v1;   //初始化为空

vector<T> v2 = v1;   //根据v1进行赋值初始化
vector<T> v2(v1);    //根据v1进行直接初始化

vector<T> v3(n,val);    //构造初始化,v3中有n个val
vector<T> v3(n)         //构造初始化,v3中有n个T类型的默认值

vector<T> v4 = {a,b,c...};   //参数列表赋值初始化
vector<T> v4{a,b,v...};      //参数列表直接初始化
  • 赋值初始化要求v1和v2类型必须完全相同,int和double不能相互赋值
  • vector v3(n)要求类型T必须能够默认初始化,如果类型T要求显示初始化,则该构造语句错误
  • 列表初始化必须使用{},构造初始化一般使用(),也可以使用{},但不推荐。当遇见{}时,优先考虑列表初始化,不符合列表初始化的才是构造初始化

二、vector操作

向vector中添加元素

使用push_back()函数向vector尾部添加新的元素

vector<int> a;
for(int i = 0; i != 100; i++)
    a.push_back(i)  //依次将0-99添加到vector中
  • 在初始化vector时候,推荐初始化一个空的vector,然后利用push_back添加元素,这样做在C++中效率非常高
  • 但是当vector中所有元素均相同的时候,列表或构造初始化效率更高
  • 当循环体中有push_back()函数时候,不可以使用针对vector的范围for循环,因为范围for循环在遍历过程中不允许改变遍历对象的长度。但范围for循环在顺序遍历的时候可以有效保证不出现下标越界错误
  • 在使用范围for循环对vector进行迭代时候,同样只有引用可以改变vector本身元素的值
  • 禁止使用下标为vector添加新元素,下标只能访问已有元素,不能添加新元素,否则就是超出范围了
  • 这里条件使用!=是C++泛型编程思想的体现,vector是一个容器,C++全部的容器都定义了和!=运算,但只有少部分定义了比较运算。同样string中最好也使用和!=

其他vector支持的操作

大多数与string支持的操作相同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MstbPqeI-1621249966559)(0E459F216ABD4D78BBFC7DEAFAB7D7AD)]

  • 当两个vector中类型能够比较的时候才可以比较
  • vector.size()的类型是vector::size_type而不是vector::size_type,一般还是用decltype()来返回比较好
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值