在 C++ 中使用 STL 队列容器

Jinku Hu 2023年10月12日
  1. 使用 std::queue 在 C++ 中声明一个 STL 队列对象
  2. 使用 size 成员函数在 C++ 中检索队列的大小
  3. 在 C++ 中使用 swap 成员函数交换两个队列对象的内容
在 C++ 中使用 STL 队列容器

本文解释了如何在 C++ 中使用 STL 队列容器。

使用 std::queue 在 C++ 中声明一个 STL 队列对象

C++ 标准库提供了几个容器类,用于提供管理对象集合的基本类型。虽然,有一些特殊的容器称为容器适配器,它们使用最受限制的接口转换基本容器以满足特殊需求。

其中一个容器适配器是 std::queue,它调整序列容器以提供 FIFO(先进先出)数据结构。请注意,底层基础容器应实现 SequenceContainer 要求并具有四个成员函数:backfrontpush_backpop_front。只有来自基本容器的 std::dequestd::list 函数满足上述要求,因此可用于存储 queue 元素。

#include <iostream>
#include <queue>

using std::cout;
using std::endl;
using std::queue;
using std::string;

template <typename Queue>
void printQueue(Queue q) {
  while (!q.empty()) {
    cout << q.front() << ", ";
    q.pop();
  }
  cout << endl;
}

int main() {
  std::queue<string> q1;
  std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};

  for (const auto& n : deq1) q1.push(n);
  printQueue(q1);

  std::queue<string> q2(deq1);
  printQueue(q2);

  return EXIT_SUCCESS;
}

输出:

one, eight, six, seven, eleven, ten,
one, eight, six, seven, eleven, ten,

std::queue 容器可以使用现有的 std::deque 对象进行初始化。后者初始化的构造函数只需要一个 deque 类型的参数。另一方面,我们可以声明一个队列对象并使用 push 函数添加元素。在上面的代码片段中,我们演示了上述方法并使用 printQueue 函数打印队列的内容。

请注意,队列元素的迭代是通过使用 empty 函数的 while 循环完成的,因为迭代器不可访问。在每个循环循环中,我们使用 front 成员函数访问第一个元素,并使用 pop 删除相同的元素。由于后一个操作修改了原始队列对象,我们接受它作为值参数而不是引用。

使用 size 成员函数在 C++ 中检索队列的大小

你可以使用 size 成员函数来检索队列对象中的元素数。该函数具有恒定的时间性能。

#include <iostream>
#include <queue>

using std::cout;
using std::endl;
using std::queue;
using std::string;

int main() {
  std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};

  std::queue<string> q2(deq1);

  cout << "size of the queue = " << q2.size() << endl;

  return EXIT_SUCCESS;
}

输出:

size of the queue = 6

在 C++ 中使用 swap 成员函数交换两个队列对象的内容

我们可以使用 swap 成员函数交换两个队列对象的元素。它将另一个队列对象作为唯一参数,并与调用者对象交换其内容。请注意,参数对象分配了调用者队列的内容。

#include <iostream>
#include <queue>

using std::cout;
using std::endl;
using std::queue;
using std::string;

template <typename Queue>
void printQueue(Queue q) {
  while (!q.empty()) {
    cout << q.front() << ", ";
    q.pop();
  }
  cout << endl;
}

int main() {
  std::queue<string> q1;
  std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};

  for (const auto& n : deq1) q1.push(n);

  std::queue<string> q2(deq1);
  q2.push(deq1.front());
  q2.push("zero");

  cout << "q1: ";
  printQueue(q1);
  cout << "q2: ";
  printQueue(q2);

  q1.swap(q2);

  cout << "q1: ";
  printQueue(q1);
  cout << "q2: ";
  printQueue(q2);

  return EXIT_SUCCESS;
}

输出:

q1: one, eight, six, seven, eleven, ten,
q2: one, eight, six, seven, eleven, ten, one, zero,
q1: one, eight, six, seven, eleven, ten, one, zero,
q2: one, eight, six, seven, eleven, ten,
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Queue