队列: 队列是一种线性数据结构,遵循先进先出 (FIFO) 顺序执行操作。它是一种容器适配器,其中元素被插入容器的一端并从另一端删除。
函数:
- empty() :测试队列是否为空。
- size() :返回无符号整数,队列的大小。
- queue::front() and queue::back() : front() 函数返回对队列中第一个元素或最旧元素的引用。 back() 函数返回对队列的最后一个或最新元素的引用。
- push(k) and pop() : push() 函数将元素‘k’ 添加到队列末尾。 pop() 函数从队列开头删除元素,并将其大小减少 1。
- swap():交换相同类型的两个不同队列的元素,但大小可能相同也可能不同。
- emplace() :用于在队列末尾插入新元素。
用法:
queue <data_type> q
下面的程序来说明这一点:
C++
// C++ program to demonstrate the
// working of queue
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
// Declare a queue
queue<int> q;
// Insert elements in the queue
q.push(10);
q.push(5);
q.push(15);
q.push(1);
// Delete elements from the queue
q.pop();
q.pop();
cout << "Elements in Queue are: ";
// Print the element stored
// in queue
while (!q.empty()) {
cout << q.front() << ' ';
// Pop the front element
q.pop();
}
return 0;
}
输出:
Elements in Queue are: 15 1
双端队列: 双端队列是一个序列容器具有两端伸缩的能力。它是一个模板标准模板库或STL在C++是。它类似于向量但对于元素的插入和删除效率更高。连续存储分配双端队列中的情况可能无法像向量中那样得到保证。
函数:
- max_size() :返回双端队列可以包含的最大元素数。
- push_back() 和 push_front() :push_front( ) 将元素从前面推入双端队列,push_back( ) 从后面将元素推入双端队列。
- pop_front() and pop_back() : pop_front() 函数用于从双端队列的前面弹出元素,pop_back( ) 函数用于从双端队列的后面弹出元素。
- clear() 和 erase() :clear 用于从双端队列中删除所有元素,erase 用于删除某些指定元素。
- insert() :通过在指定位置插入元素来增加容器边长。
- resize():根据要求更改元素容器的大小。
- rbegin() 和 rend() :rbegin() 指向双端队列的最后一个元素,而 rend 指向双端队列开头之前的位置。
- at() and swap() : at() 指向参数中给出的元素的位置,swap( ) 用于两个双端队列的两个交换元素。
- emplace_front() and emplace_back() :这两个函数分别用于在双端队列的开头和结尾处向容器中插入新元素。
用法:
deque<data_type> dq
下面的程序来说明这一点:
C++
// C++ program to demonstrate the
// working of deque
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
// Declare a deque
deque<int> dq;
// Insert element in the front
dq.push_front(10);
dq.push_front(5);
dq.push_front(3);
// Delete elements from the front
dq.pop_front();
dq.pop_front();
// Insert elements in the back
dq.push_back(1);
dq.push_back(50);
dq.push_back(2);
// Delete elements from the back
dq.pop_back();
dq.pop_back();
cout << "Elements in deque are: ";
// Print the element stored
// in deque
while (!dq.empty()) {
cout << " " << dq.front();
dq.pop_front();
}
return 0;
}
输出:
Elements in deque are: 10 1
下面是队列和双端队列之间的表格差异:
编号 |
Queue |
Deque |
1 | 只能通过后端插入。 | 可以通过两端插入。 |
2 | 只能通过前端删除元素。 | 可以通过两端删除元素。 |
3 | 无法通过迭代器访问元素。 | 可以通过迭代器访问元素。 |
4 | 作为容器适配器实现。 | 通常作为某种形式的动态数组来实现。 |
5 | 堆栈不能使用队列来实现。 | 堆栈可以使用双端队列来实现。 |
相关用法
- C++ Queue back()用法及代码示例
- C++ Queue emplace()用法及代码示例
- C++ Queue empty()用法及代码示例
- C++ Queue pop()用法及代码示例
- C++ Queue push()用法及代码示例
- C++ Queue size()用法及代码示例
- C++ Queue queue()用法及代码示例
- C++ Queue front()用法及代码示例
- C++ Queue swap()用法及代码示例
- C++ Queue priority_queue()用法及代码示例
- C++ Queue top()用法及代码示例
- C++ Qstring转Hexadecimal用法及代码示例
- C++ cos()用法及代码示例
- C++ sin()用法及代码示例
- C++ asin()用法及代码示例
- C++ atan()用法及代码示例
- C++ atan2()用法及代码示例
- C++ acos()用法及代码示例
- C++ tan()用法及代码示例
- C++ sinh()用法及代码示例
- C++ ceil()用法及代码示例
- C++ tanh()用法及代码示例
- C++ fmod()用法及代码示例
- C++ acosh()用法及代码示例
- C++ asinh()用法及代码示例
注:本文由纯净天空筛选整理自aktmishra143大神的英文原创作品 Difference between Queue and Deque in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。