在 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