文章目录
前言
vector是一个标准库类型,表示对象的集合,也常常被称作容器。容器种类很多,包括list、deque、set、map等等,本篇文章将对vector的使用方法进行简要讲解。
vector可以看作一个长度可变的数组,相对于单纯的数组来说,灵活性更高,增删改查方便,可以使用迭代器。
一、vector的定义和初始化
在使用vector之前,必须要先引入库
#include<vector>
using std::vector;
初始化vector对象的方法
假设T是一个类型
vector<T>v1;
这样就定义了一个空vector,也可以定义时就初始化,如下:
vector<T>v2(v1);//将v1作为v2的副本创建一个相同的vector
vector<T>v3(n, val);//创建一个包含n个val的vector
vector<T>v4(n);//设定初始大小为n
vector<T>v5{ a,b,c }//列表初始化
假如我们需要定义一个包含double类型的vector,并且其中包含5个11.45:
vector<double>v_double(5, 11.45);
注意,包含类型不同的容器不能相互拷贝
二、vector基本操作
1. 拷贝
vector<int>a;
vector<int>b = a;//直接用 = 号赋值即可
2.向vector中添加元素
vector<int>a;
//这里使用了循环将1~9添加到a的尾部
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}
如果需要输出vector中的元素,可以把它当作一个数组来看待
//这里使用范围循环来输出
for (auto x : a)
{
std::cout << x << std::endl;
}
有人认为范围循环效率低于取下标,这是错误的,它俩效率一样
注意1:使用范围循环不应改变其序列大小
注意2:不能使用超过原容器大小的下标的方式来新增元素
3.一些vector的成员函数
vector<int>v;
v.empty() | 检查是否为空 |
---|---|
v.size() | 返回元素个数 |
v.push_back() | 在尾部插入元素 |
v.pop_back() | 删除尾部元素 |
v.resize() | 设置vector大小 |
v.clear() | 清除所有元素 |
v.front() | 返回第一个元素(v[0]) |
v.back() | 返回最后一个元素(v[v.size() - 1]) |
.三、迭代器使用
迭代器类似于指针
(实际上指针就是某种迭代器)
假设我们有一个名为a的vector:
vector<int>a{ 0,1,2,3,4,5,6 };
我们可以用迭代器获取首部和尾部
auto iter_front = a.begin();
auto iter_back = a.end();
std::cout << *iter_front << std::endl;//输出0
auto推断的类型是:vector<int > ::iterator
,这里auto是C + 11的特性,它可以自动推导等号后面数据的类型.
其中iter_back不能被输出,因为它是尾后指针,指向最后一个元素的后一块内存,如果元素数为0,那么iter_front == iter_back.
使用迭代器进行遍历
for (auto x = a.begin(); x != a.end(); ++x)
{
std::cout << *x;
}
同样的,使用迭代器的循环也不能向循环中添加元素,否则会失效
也可以用迭代器直接获取某个元素, 例如:
auto p = a.begin();
std::cout<<*(p + 2)<<std::endl;//输出a[2]