队列

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

函数:

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

语法

queue  q

示例代码:

#include 
using namespace std;

// Driver Code
int main()
{
    // Declare a queue
    queue q;

    // Insert elements in the queue
    q.push(110);
    q.push(15);
    q.push(115);
    q.push(11);

    // 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: 115 11

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 dq

程序示例 –

#include 
using namespace std;

// Driver Code
int main()
{
    // Declare a deque
    deque dq;

    // Insert element in the front
    dq.push_front(210);
    dq.push_front(25);
    dq.push_front(23);

    // Delete elements from the front
    dq.pop_front();
    dq.pop_front();

    // Insert elements in the back
    dq.push_back(21);
    dq.push_back(250);
    dq.push_back(22);

    // 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:  210 21

以下是队列和Deque之间的区别:

序号 队列 Deque
1 插入只能通过后端进行。 插入可以通过两端进行。
2 删除元素只能通过前端进行。 通过两端都可以删除元素。
3 元素不能通过迭代器访问。 可以通过迭代器访问元素。
4 实现为容器适配器。 一般以某种形式的动态数组实现。
5 栈不能用队列来实现。 可以用deque来实现堆栈。