C++ で STL キューコンテナを使用する
-
C++ で
std::queue
を使用して STL キューオブジェクトを宣言する -
C++ で
size
メンバー関数を使用してキューのサイズを取得する -
C++ で
swap
メンバー関数を使用して 2つのキューオブジェクトのコンテンツを交換する
![C++ で STL キューコンテナを使用する](/img/Cpp/ag-feature-image---queue-in-cpp.webp)
この記事では、C++ で STL キューコンテナを利用する方法について説明します。
C++ で std::queue
を使用して STL キューオブジェクトを宣言する
C++ 標準ライブラリは、オブジェクトのコレクションを管理するための基本的な型を提供するために使用されるいくつかのコンテナクラスを提供します。ただし、コンテナアダプタ
と呼ばれる特別なコンテナがいくつかあります。これは、最も制限されたインターフェイスを使用して、特別なニーズに合わせて基本的なコンテナを変換します。
これらのコンテナアダプタの 1つは std::queue
です。これは、シーケンスコンテナを適合させて FIFO(先入れ先出し)データ構造を提供します。基盤となる基本コンテナは SequenceContainer
要件を実装し、back
、front
、push_back
、および pop_front
の 4つのメンバー関数を持っている必要があることに注意してください。基本コンテナの std::deque
および std::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
の引数を 1つだけ必要とします。一方、キューオブジェクトを宣言し、push
関数を使用して要素を追加することができます。上記のコードスニペットでは、上記のメソッドを示し、printQueue
関数を使用してキューの内容を出力します。
キュー要素の反復は、イテレータにアクセスできないため、empty
関数を使用する while
ループで実行されることに注意してください。各ループサイクルで、front
メンバー関数を使用して最初の要素にアクセスし、pop
を使用して同じ要素を削除します。後者の操作は元のキューオブジェクトを変更するため、参照ではなく値引数として受け入れます。
C++ で size
メンバー関数を使用してキューのサイズを取得する
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
メンバー関数を使用して 2つのキューオブジェクトのコンテンツを交換する
swap
メンバー関数を使用して、2つのキューオブジェクトの要素を交換できます。唯一の引数として別のキューオブジェクトを取り、その内容を呼び出し元オブジェクトと交換します。引数オブジェクトが呼び出し元キューの内容を割り当てたことに注意してください。
#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,