C++ 标准模板库 - <deque>
简介
双端队列是 Double Ended Queue 的首字母缩写。 它是一个序列容器,可以改变它的运行时大小。 容器是保存相同类型数据的对象。 序列容器严格按线性顺序存储元素。
deque 的元素可以分散在不同的内存块中。 容器存储必要的信息以允许在恒定时间内直接访问任何元素。与向量不同,deque 不能保证将所有元素存储在连续的内存位置。 因此,它不允许通过偏移指针直接访问数据。 但它允许使用下标运算符 [ ] 直接访问任何元素。
双端队列可以在运行时根据需要从两端收缩或扩展。 内部分配器自动满足存储要求。 双端队列提供与向量类似的功能,但提供了从任意端插入和删除数据的有效方法。
零大小的双端队列也是有效的。 在这种情况下, deque.begin() 和 deque.end() 指向相同的位置。 但是调用 front() 或 back() 的行为是未定义的。
定义
下面是来自 <deque> 头文件的 std::deque 的定义
template < class T, class Alloc = allocator<T> > class deque;
参数
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 |
<deque> 中的函数
下面是来自 <deque> 标头的所有方法的列表。
构造函数
序号 | 方法 & 说明 |
---|---|
1 | deque::deque
default constructor
构造一个零元素的空双端队列。 |
2 | deque::deque fill constructor
用 n 个元素构造一个新的双端队列,并将 val 分配给双端队列的每个元素 |
3 | deque::deque range constructor
构造一个包含 first 到 last 范围内的元素数量的双端队列。 |
4 | deque::deque copy constructor
使用现有容器中存在的每个元素的副本构造一个双端队列。 |
5 | deque::deque move constructor
使用移动语义构造具有 other 内容的双端队列。 |
6 | deque::deque initializer list constructor
从初始化列表构造一个双端队列。 |
析构函数
序号 | 方法 & 说明 |
---|---|
1 | deque::~deque
通过释放内存来销毁双端队列对象。 |
成员函数
序号 | 方法 & 说明 |
---|---|
1 | deque::assign range version
通过替换旧值为双端队列元素分配新值。 |
2 | deque::assign fill version
通过替换旧值为双端队列元素分配新值。 |
3 | deque::assign initializer list version
通过替换旧值为双端队列元素分配新值。 |
4 | deque::at
返回对出现在双端队列中位置 n 的元素的引用。 |
5 | deque::back
返回对双端队列最后一个元素的引用。 |
6 | deque::begin
返回指向双端队列第一个元素的随机访问迭代器。 |
7 | deque::cbegin
返回指向双端队列开头的常量随机访问迭代器。 |
8 | deque::cend
返回指向双端队列开头的常量随机访问迭代器。 |
9 | deque::clear
通过从双端队列中删除所有元素来销毁双端队列,并将双端队列的大小设置为零。 |
10 | deque::crbegin
返回一个常量反向迭代器,它指向容器的反向器开始。 |
11 | deque::crend
返回一个指向双端队列反向端的常量反向迭代器。 |
12 | deque::emplace
通过在 position 处插入新元素来扩展容器。 |
13 | deque::emplace_back
在双端队列末尾插入新元素。 |
14 | deque::emplace_front
在双端队列的开头插入新元素。 |
15 | deque::empty
测试双端队列是否为空。 |
16 | deque::end
返回一个迭代器,它指向双端队列容器中的 past-the-end 元素。 |
17 | deque::erase position version
从双端队列中删除单个元素。 |
18 | deque::erase range version 从双端队列中删除单个元素。 |
19 | deque::front
返回对双端队列第一个元素的引用 |
20 | deque::get_allocator
返回与 deque 关联的分配器 |
21 | deque::insert single element version
通过在 position 处插入新元素来扩展容器。 |
22 | deque::insert fill version
通过在容器中插入新元素来扩展容器。 |
23 | deque::insert range version
通过在容器中插入新元素来扩展容器。 |
24 | deque::insert move version 通过在容器中插入新元素来扩展容器。 |
25 | deque::insert initializer list version
通过在容器中插入新元素来扩展容器。 |
26 | deque::max_size
返回双端队列可以容纳的最大元素数。 |
27 | deque::operator= copy version
通过替换旧内容为双端队列分配新内容,并在必要时修改大小。 |
28 | deque::operator= move version
通过替换旧内容为双端队列分配新内容,并在必要时修改大小。 |
29 | deque::operator= initializer list version
通过替换旧内容为双端队列分配新内容,并在必要时修改大小。 |
30 | deque::operator[]
返回对位于 n 处的元素的引用。 |
31 | deque::pop_back
从双端队列中删除最后一个元素并将双端队列的大小减小一。 |
32 | deque::pop_front
从双端队列中删除第一个元素并将双端队列的大小减少一个。 |
33 | deque::push_back
在双端队列的末尾插入新元素并将双端队列的大小增加一。 |
34 | deque::push_back move version
在双端队列的末尾插入新元素并将双端队列的大小增加一。 |
35 | deque::push_front
在双端队列的前面插入新元素并将双端队列的大小增加一。 |
36 | deque::push_front move version
在双端队列的前面插入新元素并将双端队列的大小增加一。 |
37 | deque::rbegin
返回一个反向迭代器,它指向双端队列的最后一个元素。 |
38 | deque::rend
返回一个反向迭代器,它指向双端队列的反向端。 |
39 | deque::resize
更改双端队列的大小。 |
40 | deque::resize value version
更改双端队列的大小。 |
41 | deque::shrink_to_fit
请求容器减小其容量以适应其大小。 |
42 | deque::size
返回双端队列中存在的元素数。 |
43 | deque::swap
将 deque 的内容与另一个 deque x 的内容交换。 |
非成员重载函数
序号 | 方法 & 说明 |
---|---|
1 | operator==
测试两个双端队列是否相等。 |
2 | operator!=
测试两个双端队列是否相等。 |
3 | operator<
测试第一个双端队列是否小于其他队列。 |
4 | operator<=
测试第一个双端队列是否小于或等于其他。 |
5 | operator>
测试第一个双端队列是否大于其他队列。 |
6 | operator>=
测试第一个双端队列是否大于或等于其他。 |
7 | swap
交换两个双端队列的内容。 |