2. vector 动态数组
动态数组(vector) 是顺序存储的一种数据结构,动态数组的特点是使用 索引随机定位的速度快,尾部插入数据的速度相对较快,中间插入数据的速度较慢,当存储空间不足时会动态申请更大的内存来满足存储需求。
vector 模板的定义方法如下:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
vector 的第一个类型参数 T 是存储数据的类型。第二个参数 Allocator 是内存分配器,用来自定义动态分配内存时使用,一般我们使用默认值。
vector 创建的动态数组可以使用统一初始化列表 {...} 进行初始化。如:
vector<double> vd = {1.2, 3.4};
统一初始化列表 通常用来初始化标准模板库中的容器对象。
统一初始化列表的语法格式
{对象1, 对象2, 对象3, ...}
常用的成员函数
成员函数
说明
vector构造函数。
~vector析构函数。
operator=赋值。
assign等同于
operator=。元素访问相关成员函数
at访问单个元素,检查边界。
operator[]访问单个元素。
front访问第一个元素
back访问最后一个元素
data访问存储的内存区
容量相关成员函数
empty判断是否为空
size返回数据元素个数
max_size返回可能存储的最大数据元素个数。
reserve反转数组顺序
capacity返回当前存储区能存储的数据元素的个数
修改相关成员函数
clear清空数据。
insert插入数据
emplace(C++11)使用构造对象替换
erase删除数据
push_back向后追加单个数据
pop_back删除尾部单个数据
resize修改数据元素个数量
swap交换两个容器
迭代器相关成员函数
begin 或 cbegin(C++11)返回容器数据开始位置的迭代器
end或cend回容器数据结束位置的迭代器(最后一个元素的后面)
rbegin或crbegin(C++11)返回反向迭代器的起始位置(最后一个元素)
rend或 crend(C++11)返回反向迭代器的结束位置(第一个元素的前一位置)
以上函数只给出了函数名,以上函数大多数都有重载,具体请查看官方文档.
非成员函数
操作
说明
operator==比较两个容器是否相同。
参考文档
https://en.cppreference.com/cpp/container/vector
示例
// filename: vector.cpp
#include <iostream>
#include <vector>
int main()
{
// 创建一个整数 vector 容器。
std::vector<int> v = {8, 4, 5, 9};
// 向容器内加入两个整数
v.push_back(6);
v.push_back(9);
// 覆盖位置为2的数据
v[2] = -1;
// 打印 vector
for (auto it = v.begin(); it != v.end(); it++)
std::cout << *it << ' ';
std::cout << '\n';
}
编译和运行结果如下
weimz@mzstudio:~$ g++ -o vector vector.cpp
weimz@mzstudio:~$ ./vector
8 4 -1 9 6 9