简介
deque,即双端队列(double ended queue),是一种可以在两端扩展或收缩的序列化容器。
deque是C++ 标准模板库的一部分,想要使用deque,需要在程序中包含头文件deque。
头文件
deque是C++ 标准模板库的一部分,因此,想要使用deque,需要在程序中包含头文件deque
#include<deque>
定义和初始化
格式:
包含头文件deque之后,我们可以使用下边的格式定义deque:
std::deque<object_type> variable_name;
object_type 规定了deque中可以存放哪种类型的元素。
variable_name 为deque名。
方式: 定义deque的常用方式如下所示:
deque<Type> v1; //v1是一个空deque,可存储元素类型为T,执行默认初始化
deque<Type> v2(v1); //v2中包含v1中的所有元素
deque<Type> v2 = v1; //等价于v2(v1)
deque<Type> v3(n,value); //v3中有n个元素,并且值都为value
deque<Type> v4(n); //v4包含了n个重复执行了值初始化的对象
deque<Type> v5{a,b,c.....}; //v5包含大括号中的所有元素
deque<Type> v6 = {a,b,c...}; //等价于v5{a,b,c....}
迭代器
deque.begin():指向deque首个元素。
deque.end():指向deque尾元素的下一个位置。
deque.rbegin():指向deque尾元素的反向迭代器,即rbegin()指向尾元素,rbegin-1指向倒数第二个元素。
deque.rend():指向deque头元素前一个位置的反向迭代器,即rend()指向头元素前一个位置元素,rbegin-1指向第一个元素
deque.cbegin():指向deque首元素,与begin()相同。增加了const属性,不能用于修改元素。
deque.cend():指向deque尾元素下一个位置,与end()相同。增加了const属性,不能用于修改元素。
deque.crbegin():指向deque尾元素的反向迭代器,与rbegin()相同。增加了const属性,不能用于修改元素。
deque.crend():指向deque头元素前一个位置的反向迭代器,与rend()相同。增加了const属性,不能用于修改元素。
用法(函数)
-
size()——元素个数
要想知道deque中有多少元素,使用deque.size()方法,作用是返回deque中元素的个数。
-
max_size()——最多能容纳元素个数:
要想知道deque最多可以有多少元素,使用deque.max_size()方法,作用是返回deque中最多能容纳元素个数。
-
resize(n)——改变deque大小为n
如果想要改变deque的size,使用deque.resize(n)方法,将deque的size改为n。
-
empty()——判断deque是否为空
empty()方法用来判断deque中是否有元素,如果有元素,返回false;如果没有元素,返回true。即为空返回true,非空返回false。
-
shrink_to_fit()——要求deque减小容量已适应元素个数
deque减小内存以适配size,即将分配给deque的内存减小到当前deque中元素实际使用的内存大小。由于deque的实现机制大多为一个动态数组, 可以保留已被删除的元素的内存空间或者提前分配的额外内存空间以快速插入,因此一个deque分配的内存空间可能比deque保存当前元素所需的内存要多。 使用shrink_to_fit()就会释放这些多余暂未被用到的内存。
-
at()——访问deque元素
使用元素的索引来访问deque,其中at(index)中index为索引,必须是合法的。
-
front()和back()——访问deque头尾元素
front()返回deque第一个元素,back()返回deque最后一个元素。
-
assign()——指定deque元素
assign的作用就是用新的元素替换deque中旧的元素。
-
push_back()——添加元素(deque尾部)
向deque中添加元素,使用push_back()方法,作用是向deque尾部添加一个元素。
-
push_front()——添加元素(deque头部)
向deque中添加元素,使用push_front()方法,作用是向deque头部添加一个元素。
-
pop_back()——移除deque元素(尾部)
删除deque中的元素,使用pop_back()方法,作用是删除deque尾部的一个元素。
-
pop_front()——删除deque元素(头部)
删除deque中的元素,使用pop_front()方法,作用是删除deque头部的一个元素。
-
insert()——添加元素(任意位置)
向deque中添加元素。
-
erase()——删除元素(任意位置)
erase的作用就是根据传入的迭代器删除deque中的元素,参数为一个迭代器,只删除迭代器指向的元素;参数为两个迭代器,删除两个迭代器之间的元素。
-
clear()——清空元素
clear的作用就是清空deque中的所有元素。
-
swap()——交换元素
swap的作用就是交换两个deque的元素。
-
emplace()——插入元素
向deque中添加元素,使用emplace(iterator,value)方法,作用是向iterator迭代器指向元素的前边添加一个元素value。返回一个迭代器,指向新添加的元素。
-
emplace_back()——在deque尾部插入元素
在容器尾部生成一个元素。和 push_back() 的区别是,该函数直接在容器尾部构造元素,省去了复制移动元素的过程。
-
emplace_front()——在deque尾部插入元素
在容器头部生成一个元素。和 push_front() 的区别是,该函数直接在容器头部构造元素,省去了复制移动元素的过程。
以上便是本文的全部内容
本文介绍了 deque双端队列 的定义、头文件、初始化、迭代器和 deque 的所有操作
感谢阅读,请在评论区提出您的意见,谢谢!