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
交换两个容器
迭代器相关成员函数
begincbegin(C++11)
返回容器数据开始位置的迭代器
endcend
回容器数据结束位置的迭代器(最后一个元素的后面)
rbegincrbegin(C++11)
返回反向迭代器的起始位置(最后一个元素)
rendcrend(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