1 std::vector的特点
vector是一个模板类,提供了动态数组的通用功能:
- 在数组尾部插入元素时间是固定的
- 在数组中间添加或删除元素所需时间与改元素后面的元素个数成正比
- 存储的元素数是动态的,vector类负责管理内存
vector是一种动态数组,结构体如下:
2 vector操作
2.1 实例化vector
实例化什么意思?
初始化方式:
vector<T> v1//元素为T类型
vector<T> v2(v1)//v2包含v1中所有元素的副本
vector<T> v2=v1 //等价于v2(v1)
vector<T> v3(n,val)//有n个元素,值都为val
vector<T> v4(n)//包含n个元素
vector<T> v5{a,b,c...}//用初始化列表初始化
vector<T> v5={a,b,c...}//等价于v5{a,b,c...}
2.2 插入元素
2.2.1 在末尾插入元素
push_back是vector类的一个公有成员函数,用于在动态数组末尾插入对象
2.2.2 在指定位置插入元素
要想在指定位置插入元素可使用insert()函数,其有多个重载版本
2.3 访问数组元素
有三种方法访问vector元素:
- 使用下标运算符[]以数组语法方式访问
- 使用成员函数at()
- 使用迭代器
2.3.1 使用下标运算符
2.3.2 使用at()成员函数
访问vector中指定索引的元素,并返回改元素的引用
示例:
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (10);
// 分配元素
for (unsigned i=0; i<myvector.size(); i++)
myvector.at(i)=i;
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); i++)
std::cout << ' ' << myvector.at(i);
std::cout << '\n';
return 0;
}
输出:
myvector contains: 0 1 2 3 4 5 6 7 8 9
2.3.2 使用迭代器
2.4 删除元素
pop_back()将从末尾删除元素,使用pop_back()删除元素的时间是固定的,不随vector存储元素个数变化
3 vector的大小和容量
vector的大小指实际存储的元素个数,可通过调用成员函数size()查询
vector的容量指在重新分配内存以存储更多元素前vector能够存储的元素数,可通用成员函数capacity()查询
如果vector需要频繁的给其内部动态数组分配内存,将对性能造成一定影响,可通过成员函数reserve解决
4 STL deque类
deque是一个STL动态数组类,与vector非常类似,但支持在数组开头和末尾插入或删除元素。其内部结构如图:
与vector不同的是,其除了可以在末尾插入删除元素外(操作与vector一样),还可以在开头插入删除元素
- 插入元素:push_front()
- 删除元素:pop_front()