C++ 标准模板库 - <vector>
简介
向量是可以改变大小的序列容器。 容器是保存相同类型数据的对象。 序列容器严格按线性顺序存储元素。
Vector 将元素存储在连续的内存位置,并允许使用下标运算符 [] 直接访问任何元素。 与数组不同,vector 可以在运行时根据需要收缩或扩展。 向量的存储是自动处理的。
为了在运行时支持收缩和扩展功能,向量容器可能会分配一些额外的存储空间以适应可能的增长,因此容器的实际容量大于大小。 因此,与数组相比,vector 消耗更多的内存来换取管理存储和以高效方式动态增长的能力。
零大小的向量也是有效的。 在这种情况下,vector.begin() 和 vector.end() 指向相同的位置。 但是调用 front() 或 back() 的行为是未定义的。
定义
下面是来自 <vector> 头文件的 std::vector 的定义
template < class T, class Alloc = allocator<T> > class vector;
参数
T − 包含的元素的类型。
T 可以替换为任何其他数据类型,包括用户定义的类型。
Alloc − 分配器对象的类型。
默认使用分配器类模板,它定义了最简单的内存分配模型,并且与值无关。
成员类型
以下成员类型可以用作成员函数的参数或返回类型。
序号 | 成员类型 | 定义 |
---|---|---|
1 | value_type | T (First parameter of the template) |
2 | allocator_type | Alloc(Second parameter of the template) |
3 | reference | value_type& |
4 | const_reference | const value_type& |
5 | pointer | value_type* |
6 | const_pointer | const value_type* |
7 | iterator | a random access iterator to value_type |
8 | const_iterator | a random access iterator to const value_type |
9 | reverse_iterator | std::reverse_iterator <iterator> |
10 | const_reverse_iterator | std::reverse_iterator <const_iterator> |
11 | size_type | size_t |
12 | difference_type | ptrdiff_t |
<vector> 中的函数
下面是来自 <vector> 标头的所有方法的列表。
构造函数
序号 | 方法 & 说明 |
---|---|
1 | vector::vector default constructor 构造一个包含零个元素的空容器。 |
2 | vector::vector fill constructor 构造一个包含 n 元素的容器,并将 val 分配给每个元素。 |
3 | vector::vector range constructor 构造一个容器,其中包含 first 到 last. 范围内的尽可能多的元素。 |
4 | vector::vector copy constructor 构造一个容器,其中包含现有容器 x. 中存在的每个元素的副本 |
5 | vector::vector move constructor 使用 move 语义构造具有 other 内容的容器。 |
6 | vector::vector initializer list constructor 从初始化列表构造一个容器。 |
析构函数
序号 | 方法 & 说明 |
---|---|
1 | vector::~vector
通过释放容器内存来销毁容器。 |
成员函数
序号 | 方法 & 说明 |
---|---|
1 | vector::assign fill version 通过替换旧值为向量元素分配新值。 |
2 | vector::assign range version 通过替换旧值为向量元素分配新值。 |
3 | vector::assign initializer list version 通过替换旧值为向量元素分配新值。 |
4 | vector::at
返回对向量中位置 n 处元素的引用。 |
5 | vector::back
返回对向量最后一个元素的引用。 |
6 | vector::begin
返回指向向量第一个元素的随机访问迭代器。 |
7 | vector::capacity
返回分配存储的大小,以元素表示。 |
8 | vector::cbegin
返回指向向量开头的常量随机访问迭代器。 |
9 | vector::cend
返回指向向量开头的常量随机访问迭代器。 |
10 | vector::clear
通过从向量中删除所有元素并将向量的大小设置为零来销毁向量。 |
11 | vector::crbegin
返回一个常量反向迭代器,它指向容器的反向器开始。 |
12 | vector::crend
返回一个指向向量反向端的常量反向迭代器。 |
13 | vector::data
返回指向向量容器的第一个元素的指针。 |
14 | vector::emplace
通过在 position 处插入新元素来扩展容器。 |
15 | vector::emplace_back
在向量的末尾插入新元素。 |
16 | vector::empty
测试向量是否为空。 |
17 | vector::end
返回一个迭代器,它指向向量容器中的 past-the-end 元素。 |
18 | vector::erase position version 从向量中删除单个元素。 |
19 | vector::erase range version 从向量中删除单个元素。 |
20 | vector::front
返回对向量第一个元素的引用。 |
21 | vector::get_allocator
返回与向量关联的分配器。 |
22 | vector::insert single element version 通过在 position 插入新元素来扩展迭代器。 |
23 | vector::insert fill version 通过在容器中插入新元素来扩展向量。 |
24 | vector::insert range version 通过在容器中插入新元素来扩展向量。 |
25 | vector::insert move version 通过在容器中插入新元素来扩展向量。 |
26 | vector::insert initializer list version 通过在容器中插入新元素来扩展向量。 |
27 | vector::max_size
返回向量可以容纳的最大元素数。 |
28 | vector::operator= copy version 通过替换旧内容为向量分配新内容,并在必要时修改大小。 |
29 | vector::operator= move version 通过替换旧内容为向量分配新内容,并在必要时修改大小。 |
30 | vector::operator = initializer list version 通过替换旧内容为向量分配新内容,并在必要时修改大小。 |
31 | vector::operator[]
返回对位于 n 处的元素的引用。 |
32 | vector::pop_back
从向量中删除最后一个元素并将向量的大小减小一。 |
33 | vector::push_back
在向量末尾插入新元素并将向量的大小增加一。 |
34 | vector::rbegin
返回一个反向迭代器,它指向向量的最后一个元素。 |
35 | vector::rend
返回一个反向迭代器,它指向向量的反向端。 |
36 | vector::reserve
保留向量容量的请求至少足以包含 n 个元素。 |
37 | vector::resize
改变向量的大小。 |
38 | vector::shrink_to_fit
请求容器减小其容量以适应其大小。 |
39 | vector::size
返回向量中存在的元素数。 |
40 | vector::swap
用向量 x 的内容交换向量的内容。 |
非成员重载函数
序号 | 方法 & 说明 |
---|---|
1 | operator ==
测试两个向量是否相等。 |
2 | operator !=
测试两个向量是否相等。 |
3 | operator <
测试第一个向量是否小于其他向量。 |
4 | operator <=
测试第一个向量是否小于或等于其他向量。 |
5 | operator >
测试第一个向量是否大于其他向量。 |
6 | operator >=
测试第一个向量是否大于或等于其他向量。 |
7 | swap
交换两个向量的内容。 |