Cpp Standard Library 简明教程
C++ Library - <vector>
Introduction
向量是可更改大小的序列容器。 容器是保存相同类型数据的对象。 序列容器将元素严格存储在线性序列中。
向量将元素存储在连续的内存位置中,并可以使用下标运算符 [] 直接访问任何元素。 与数组不同,向量可以在运行时根据需要进行收缩或扩展。 向量的存储会自动处理。
为了支持运行时的收缩和扩展功能,向量容器可能会分配一些额外的存储空间以容纳可能的增长,因此容器的实际容量大于大小。 因此,与数组相比,向量消耗更多的内存,以换取有效管理存储和动态增长。
零大小的向量也有效。在这种情况中,vector.begin() 和 vector.end() 指向相同的位置。但调用 front() 或 back() 的行为是未定义的。
Definition
以下是 <vector> 头文件中的 std::vector 定义
template < class T, class Alloc = allocator<T> > class vector;
Parameters
-
T − 包含元素的类型。T 可以用包括用户自定义类型在内的任何其他数据类型替换。
-
Alloc − 分配器对象类型。默认情况下,使用分配器类模板,该模板定义最简单的内存分配模型,并且与值无关。
Member types
以下成员类型可作为参数或返回类型,由成员函数使用。
Sr.No. |
Member types |
Definition |
1 |
value_type |
T(模板的第一个参数) |
2 |
allocator_type |
Alloc(模板的第二个参数) |
3 |
reference |
value_type& |
4 |
const_reference |
const value_type& |
5 |
pointer |
value_type* |
6 |
const_pointer |
const value_type* |
7 |
iterator |
值类型的随机访问迭代器 |
8 |
const_iterator |
const 值类型的随机访问迭代器 |
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 |
Functions from <vector>
以下是 <vector> 头文件中的所有方法列表。
Constructors
Sr.No. |
Method & Description |
1 |
vector::vector default constructor 构造一个容器,容器是空的,没有元素。 |
2 |
vector::vector fill constructor 构造一个容器,其中有 n 个元素,并且将 val 分配给每个元素。 |
3 |
vector::vector range constructor 构造一个容器,其中有 range 中 first 到 last 的元素。 |
4 |
vector::vector copy constructor 构造一个容器,其中包含现有容器 x 中的每个元素的副本。 |
5 |
vector::vector move constructor 使用移动语义构造一个包含另一个容器的内容的容器。 |
6 |
vector::vector initializer list constructor 从初始化程序列表构造一个容器。 |
Destructor
Sr.No. |
Method & Description |
1 |
vector::~vector Destroys container by deallocating container memory. |
Member functions
Sr.No. |
Method & Description |
1 |
vector::assign fill version 通过替换旧元素向 vector 元素分配新值。 |
2 |
vector::assign range version 通过替换旧元素向 vector 元素分配新值。 |
3 |
vector::assign initializer list version 通过替换旧元素向 vector 元素分配新值。 |
4 |
vector::at 返回 vector 中 n 处元素的引用。 |
5 |
vector::back 返回 vector 最后元素的引用。 |
6 |
vector::begin 返回指向 vector 第一个元素的随机访问迭代器。 |
7 |
vector::capacity 以元素为单位返回已分配存储的大小。 |
8 |
vector::cbegin 返回指向 vector 开始的常量随机访问迭代器。 |
9 |
vector::cend 返回指向 vector 开始的常量随机访问迭代器。 |
10 |
vector::clear 通过删除所有元素来破坏向量,并将向量的尺寸设为 0。 |
11 |
vector::crbegin 返回指向容器反向开始的常量反向迭代器。 |
12 |
vector::crend 返回一个指向向量反向结束的常量反向迭代器。 |
13 |
vector::data 返回一个指向向量容器的第一个元素的指针。 |
14 |
vector::emplace 通过插入新元素在指定位置来扩展容器。 |
15 |
vector::emplace_back 在向量的末尾插入新元素。 |
16 |
vector::empty 测试向量是否为空。 |
17 |
vector::end 返回指向向量容器中超出结束元素的迭代器。 |
18 |
vector::erase 位置版本移除向量中的单个元素。 |
19 |
vector::erase 范围版本移除向量中的单个元素。 |
20 |
vector::front 返回对向量第一个元素的引用。 |
21 |
vector::get_allocator 返回与向量关联的分配器。 |
22 |
vector::insert 单个元素版本通过在指定位置插入新元素来扩展迭代器。 |
23 |
vector::insert 填充版本通过在容器中插入新元素,来扩展向量。 |
24 |
vector::insert 范围版本通过在容器中插入新元素,来扩展向量。 |
25 |
vector::insert 移动版本通过在容器中插入新元素,来扩展向量。 |
26 |
vector::insert 初始值列表版本通过在容器中插入新元素,来扩展向量。 |
27 |
vector::max_size 返回向量可容纳的最大元素数。 |
28 |
vector::operator= 拷贝版本为向量指派新内容,取代旧内容,必要时修改尺寸。 |
29 |
vector::operator= move 版本使用新内容替换旧内容并且根据需要修改大小。 |
30 |
vector::operator = initializer list 版本使用新内容替换旧内容并且根据需要修改大小。 |
31 |
vector::operator[] 返回一个指向位置 n 的元素的引用。 |
32 |
vector::pop_back 移除 vector 的最后一个元素并使 vector 的大小减一。 |
33 |
vector::push_back 在 vector 的末尾插入一个新元素,使 vector 的大小增加一。 |
34 |
vector::rbegin 返回一个指向 vector 的最后一个元素的反向迭代器。 |
35 |
vector::rend 返回一个指向 vector 反向末尾的反向迭代器。 |
36 |
vector::reserve 要求保留的 vector 的容量至少足以包含 n 个元素。 |
37 |
vector::resize 更改 vector 的大小。 |
38 |
vector::shrink_to_fit 要求容器减少其容量以适应其大小。 |
39 |
vector::size 返回 vector 中存在的元素数。 |
40 |
vector::swap 将 vector 的内容与 vector x 的内容交换。 |
Non-member overloaded functions
Sr.No. |
Method & Description |
1 |
[role="bare"]../cpp_standard_library/cpp_vector_operator_equal_to.html测试两个 vector 是否相等。 |
2 |
operator != 测试两个 vector 是否相等。 |
3 |
operator < 测试第一个 vector 是否小于另一个 vector。 |
4 |
operator ⇐ 测试第一个 vector 是否小于或等于另一个 vector。 |
5 |
operator > 测试第一个 vector 是否大于另一个 vector。 |
6 |
operator >= 测试第一个 vector 是否大于或等于另一个 vector。 |
7 |
swap 交换两个 vector 的内容。 |