2. vector 动态数组
动态数组(vector) 是顺序存储的一种数据结构,动态数组的特点是使用 索引随机定位的速度快,尾部插入数据的速度相对较快,中间插入数据的速度较慢,当存储空间不足时会动态申请更大的内存来满足存储需求。
vector 模板的定义方法如下:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
说明:
T是存储数据的类型。Allocator是内存分配器,用来自定义动态分配内存时使用,一般我们使用默认值。
vector 创建的动态数组可以使用统一初始化列表 {...} 进行初始化。如:
std::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(C++11)返回容器数据结束位置的迭代器(最后一个元素的后面)
rbegin或crbegin(C++11)返回反向迭代器的起始位置(最后一个元素)
rend或 crend(C++11)返回反向迭代器的结束位置(第一个元素的前一位置)
以上函数只给出了函数名,以上函数大多数都有重载,具体请查看官方文档.
参考文档
https://en.cppreference.com/cpp/container/vector
非成员函数
操作
说明
operator==比较两个容器是否相同。
示例
// filename: vector.cpp
#include <iostream>
#include <vector>
int main(int argc, char * argv[]) {
// 创建一个整数的动态数组
std::vector<int> v = {11, 22};
v.push_back(33); // 向末尾追击一个整数
try {
std::cout << v.at(100) << std::endl;
}
catch (std::out_of_range & e) {
std::cout << "索引超出范围" << std::endl;
}
// 遍历 vector
for (unsigned long i = 0; i < v.size(); i++)
std::cout << v[i] << " ";
std::cout << std::endl;
return 0;
}
编译和运行结果如下
weimz@mzstudio:~$ g++ -o vector vector.cpp
weimz@mzstudio:~$ ./vector
索引超出范围
11 22 33