队列和Deque 的区别
队列
队列是一种线性数据结构,遵循先进先出(FIFO)的顺序进行操作。它是一种容器适配器,元素被插入到容器的一端,并从另一端删除。
函数:
empty()
- 测试队列是否为空。size()
- 返回无符号int,即队列的大小。queue::front()
和queue::back()
:front()
函数返回队列中第一个元素或最老的元素的引用。back()
函数返回队列中最后一个或最新一个元素的引用。push(k)
和pop()
:push()
函数在队列的末尾添加元素’k’。pop()
函数从队列的开头删除元素并将其大小减少1。swap()
:交换两个相同类型的不同队列的元素,但可能是也可能不是相同大小的。emplace()
: 用来在队列的末端插入一个新元素。
语法
示例代码:
运行结果:
Deque
Deque是一个序列容器,两端都有扩展和收缩的能力。它是C++中标准模板库或STL的一个模板。它类似于向量,但对于元素的插入和删除更有效。deque中的连续存储分配可能不像向量那样有保证。
函数:
max_size()
: 返回deque可以包含的最大元素数。push_back()
和push_front()
: push_front()将元素从前面推入deque,push_back()将元素从后面推入deque。pop_front()
和pop_back()
: pop_front()函数用于从前面的deque中取出元素,pop_back()
函数用于从后面的deque中取出元素。clear()
和erase()
:clear用于从deque中删除所有的元素,erase用于删除一些指定的元素。insert()
: 通过在指定的位置插入元素来增加容器的长度。resize()
: 根据要求改变元素容器的大小。rbegin()
和rend()
:rbegin()
指向deque的最后一个元素,而rend则指向deque开始前的位置。at()
和swap()
:at()
指向参数中给出的元素的位置,swap()
用于交换两个deque的元素。emplace_front()
和emplace_back()
:这两个函数分别用于在deque的开头和结尾的容器中插入新元素。
语法:
程序示例 –
运行结果:
以下是队列和Deque之间的区别:
序号 | 队列 | Deque |
---|---|---|
1 | 插入只能通过后端进行。 | 插入可以通过两端进行。 |
2 | 删除元素只能通过前端进行。 | 通过两端都可以删除元素。 |
3 | 元素不能通过迭代器访问。 | 可以通过迭代器访问元素。 |
4 | 实现为容器适配器。 | 一般以某种形式的动态数组实现。 |
5 | 栈不能用队列来实现。 | 可以用deque来实现堆栈。 |