📜  C++中Queue和Deque的区别

📅  最后修改于: 2021-09-13 02:14:43             🧑  作者: Mango

队列: 队列是一种线性数据结构,遵循先进先出 (FIFO) 顺序执行操作。它是一种容器适配器,其中元素插入容器的一端并从另一端删除。

职能:

  • empty():测试队列是否为空。
  • size():返回无符号整数,队列的大小。
  • queue::front() 和 queue::back():front()函数返回对队列中第一个元素或最旧元素的引用。 back()函数返回对队列的最后一个或最新元素的引用。
  • push(k) 和 pop():push()函数在队列末尾添加元素 ‘k’。 pop()函数从队列的开头删除元素并将其大小减 1。
  • swap():交换两个相同类型的不同队列的元素,但大小可能相同,也可能不同。
  • emplace():用于在队列末尾插入一个新元素。

句法:

queue  q

下面是说明相同的程序:

C++
// C++ program to demonstrate the
// working of queue
#include 
using namespace std;
  
// Driver Code
int main()
{
    // Declare a queue
    queue 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;
}


C++
// C++ program to demonstrate the
// working of deque
#include 
using namespace std;
  
// Driver Code
int main()
{
    // Declare a deque
    deque dq;
  
    // Insert element in the front
    dq.push_front(10);
    dq.push_front(5);
    dq.push_front(3);
  
    // Delete elements from the 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 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 Queue are: 15 1

队列: Deque 是一个具有两端伸缩能力的序列容器。它是 C++ 中标准模板库或 STL 的模板。它类似于向量,但对于元素的插入和删除更有效。双端队列中的连续存储分配可能无法像向量中那样得到保证。

职能:

  • max_size():返回 deque 可以包含的最大元素数。
  • push_back() 和 push_front():push_front() 从前面将元素推入双端队列,而 push_back() 从后面将元素推入双端队列。
  • pop_front() 和 pop_back():pop_front()函数用于从前面的 deque 中弹出元素,pop_back()函数用于从后面的 deque 中弹出元素。
  • clear() 和erase():clear 用于从双端队列中删除所有元素,erase 用于删除一些指定的元素。
  • insert():通过在指定位置插入元素来增加容器边。
  • resize():根据需要更改元素容器的大小。
  • rbegin() 和 rend():rbegin() 指向双端队列的最后一个元素,而 rend 指向双端队列开始之前的位置。
  • at() 和 swap():at() 指向参数中给定元素的位置,swap() 用于两个双端队列的两个交换元素。
  • emplace_front() 和 emplace_back():这两个函数分别用于在容器中插入新元素在 deque 的开头和结尾。

句法:

deque dq

下面是说明相同的程序:

C++

// C++ program to demonstrate the
// working of deque
#include 
using namespace std;
  
// Driver Code
int main()
{
    // Declare a deque
    deque dq;
  
    // Insert element in the front
    dq.push_front(10);
    dq.push_front(5);
    dq.push_front(3);
  
    // Delete elements from the 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 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

下面是队列和双端队列之间的表格区别:

S.No.

Queue

Deque

1 Insertion can be done through the front end only. Insertion is possible through both ends.
2 Deletion of elements is possible through the front end only. Deletion of elements possible through both ends.
3 Elements can not be accessed through iterators. Elements can be accessed through iterators.
4 Implemented as container adaptors. Implemented generally as some form of a dynamic array.
5 The stack can not be implemented using a queue. A stack can be implemented using deque.

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程