📜  C++中Queue和Deque的区别(1)

📅  最后修改于: 2023-12-03 15:14:01.844000             🧑  作者: Mango

C++中Queue和Deque的区别

1. Queue

Queue是一种先进先出(FIFO)的数据结构。在C++中,queue是一个标准库容器,定义在头文件中。

特点
  • 元素按照插入的先后顺序进行处理。
  • 只能从队首插入,从队尾删除。
  • 不允许直接访问中间的元素。
基本操作
  • push(elem):在队尾添加一个元素。
  • pop():移除第一个元素。
  • front():返回第一个元素。
  • back():返回最后一个元素。
  • empty():判断队列是否为空。
  • size():返回队列中元素的个数。
使用示例
#include <queue>
#include <iostream>

using namespace std;

int main()
{
    queue<int> q;

    //添加元素
    q.push(1); 
    q.push(2);
    q.push(3);

    //遍历队列
    while (!q.empty())
    {
        //输出第一个元素
        cout << q.front() << " ";
        //移除第一个元素
        q.pop();
    }

    return 0;
}

//输出
//1 2 3
2. Deque

Deque是一种双端队列,允许在队列的两端插入和删除。在C++中,deque也是一个标准库容器,定义在头文件中。

特点
  • 元素可以从两端插入和删除。
  • 可以直接访问任何一个元素。
基本操作
  • push_front(elem):在队首添加一个元素。
  • push_back(elem):在队尾添加一个元素。
  • pop_front():移除队首元素。
  • pop_back():移除队尾元素。
  • front():返回第一个元素。
  • back():返回最后一个元素。
  • empty():判断双端队列是否为空。
  • size():返回双端队列中元素的个数。
使用示例
#include <deque>
#include <iostream>

using namespace std;

int main()
{
    deque<int> dq;

    //添加元素
    dq.push_back(1);
    dq.push_back(2);
    dq.push_front(0);

    //遍历双端队列
    for (auto& i : dq)
    {
        //输出每个元素
        cout << i << " ";
    }

    //移除队首、队尾元素
    dq.pop_front();
    dq.pop_back();

    cout << endl;

    //遍历双端队列(移除元素后)
    for (auto& i : dq)
    {
        //输出每个元素
        cout << i << " ";
    }

    return 0;
}

//输出
//0 1 2
//1
3. 区别
  • Queue只能从队尾插入,从队首删除;Deque可以从队首和队尾插入和删除。
  • Queue不能直接访问中间的元素;Deque可以直接访问任何一个元素。
参考资料