C++容器 I 向量 I Basic
class template <vector> std::vector
https://www.cplusplus.com/reference/vector/vector/

模板参数【Template parameters】
T
元素的类型。
只有保证T在移动时不会抛出,实现才能优化以移动元素,而不是在重新分配期间复制它们。
别名为成员类型vector::value_type。
Alloc
用于定义存储分配模型的分配器对象的类型。默认情况下,使用分配器类模板,它定义了最简单的内存分配模型,并且与值无关。
别名为成员类型vector::allocator_type。

向量【Vector】
向量是序列容器,表示可以改变大小的数组。
与数组一样,向量使用连续的存储位置存储其元素,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,其效率与数组中的相同。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。
在内部,向量使用一个动态分配的数组来存储它们的元素。当插入新元素时,可能需要重新分配该数组,以便增大其大小,这意味着分配一个新数组并将所有元素移动到该数组中。就处理时间而言,这是一项相对昂贵的任务,因此,向量不会在每次将元素添加到容器时重新分配。
相反,载体容器可能会分配一些额外的存储空间,以适应可能的增长,因此容器的实际容量可能会大于严格需要的存储空间,以容纳其元素(即其大小)。库可以实现不同的增长策略,以平衡内存使用和重新分配,但在任何情况下,重新分配只应以对数增长的大小间隔进行,以便在向量末尾插入单个元素时,可以提供摊销的恒定时间复杂度(参见push_back)。
因此,与数组相比,向量消耗更多内存,以换取以高效方式管理存储和动态增长的能力。
与其他动态序列容器(deques、list和forward_list)相比,向量非常高效地访问其元素(就像数组一样),并且相对高效地从其末端添加或删除元素。对于涉及在端点以外的位置插入或删除元素的操作,它们的性能比其他操作差,并且与列表和转发列表相比,迭代器和引用的一致性较差。

容器属性【Container properties】
序列【Sequence】
序列容器中的元素按严格的线性序列排序。单个元素通过它们在该序列中的位置来访问。
动态数组【Dynamic array】
允许直接访问序列中的任何元素,即使是通过指针算术,并在序列末尾相对快速地添加/删除元素。
分配器感知【Allocator-aware】
容器使用分配器对象动态处理其存储需求。

成员类型【Member types】


成员函数【Member functions】
(constructor)
构造向量(公共成员函数)
(destructor)
向量析构函数(公共成员函数)
operator=
分配公共内容功能(成员)

Iterators:
begin
将迭代器返回到开头(公共成员函数)
end
返回迭代器结束(公共成员函数)
rbegin
将反向迭代器返回到反向开始(公共成员函数)
rend
返回反向迭代器到反向结束(公共成员函数)
cbegin
将常量迭代器返回到开头(公共成员函数)
cend
返回常量迭代器结束(公共成员函数)
crbegin
返回const_reverse_迭代器以反转开始(公共成员函数)
crend
返回const_reverse_迭代器到reverse end(公共成员函数)

Capacity:
size
返回大小(公共成员函数)
max_size
返回最大大小(公共成员函数)
resize
更改大小(公共成员功能)
capacity
已分配存储容量的返回大小(公共成员函数)
empty
测试向量是否为空(公共成员函数)
reserve
请求更改容量(公共成员功能)
shrink_to_fit
收缩到合适的尺寸(公共成员功能)

Element access:
operator[]
访问元素(公共成员功能)
at
访问元素(公共成员功能)
front
访问第一个元素(公共成员功能)
back
访问最后一个元素(公共成员函数)
data
访问数据(公共成员功能)

Modifiers:
assign
指定向量内容(公共成员函数)
push_back
在末尾添加元素(公共成员函数)
pop_back
删除最后一个元素(公共成员函数)
insert
插入元素(公共成员函数)
erase
删除元素(公共成员功能)
swap
交换内容(公共成员功能)
clear
清除内容(公共成员函数)
emplace
构造和插入元素(公共成员函数)
emplace_back
在末尾构造并插入元素(公共成员函数)

Allocator:
get_allocator
获取分配器(公共成员函数)