Utiliser le conteneur de file d'attente STL en C++
-
Utilisez
std::queue
pour déclarer un objet de file d’attente STL en C++ -
Utilisez la fonction membre
size
pour récupérer la taille de la file d’attente en C++ -
Utilisez la fonction membre
swap
pour échanger le contenu de deux objets de file d’attente en C++
Cet article explique comment utiliser le conteneur de file d’attente STL en C++.
Utilisez std::queue
pour déclarer un objet de file d’attente STL en C++
La bibliothèque standard C++ fournit plusieurs classes de conteneurs utilisées pour fournir des types fondamentaux pour la gestion des collections d’objets. Cependant, il existe des conteneurs spéciaux appelés adaptateurs de conteneurs
, qui transforment des conteneurs fondamentaux pour des besoins spéciaux avec l’interface la plus restreinte.
L’un de ces adaptateurs de conteneur est std::queue
, qui adapte les conteneurs de séquence pour fournir une structure de données FIFO (premier entré-premier sorti). Notez que le conteneur fondamental sous-jacent doit implémenter les exigences SequenceContainer
et avoir quatre fonctions membres : back
, front
, push_back
et pop_front
. Seules les fonctions std::deque
et std::list
des conteneurs fondamentaux satisfont aux exigences ci-dessus et peuvent donc être utilisées pour stocker des éléments 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;
}
Production:
one, eight, six, seven, eleven, ten, one, eight, six, seven, eleven, ten,
Le conteneur std::queue
peut être initialisé à l’aide de l’objet std::deque
existant. Le constructeur de cette dernière initialisation n’a besoin que d’un argument de type deque
. D’autre part, nous pouvons déclarer un objet queue et ajouter des éléments à l’aide de la fonction push
. Dans l’extrait de code ci-dessus, nous démontrons les méthodes ci-dessus et imprimons le contenu des files d’attente à l’aide de la fonction printQueue
.
Notez que l’itération sur les éléments de la file d’attente se fait avec la boucle while
utilisant la fonction empty
car les itérateurs ne sont pas accessibles. Dans chaque cycle de boucle, nous accédons au premier élément à l’aide de la fonction membre front
et utilisons pop
pour supprimer le même élément. Puisque cette dernière opération modifie l’objet de file d’attente d’origine, nous l’acceptons comme argument de valeur plutôt que comme référence.
Utilisez la fonction membre size
pour récupérer la taille de la file d’attente en C++
Vous pouvez utiliser la fonction membre size
pour récupérer le nombre d’éléments dans l’objet file d’attente. La fonction a une performance temporelle constante.
#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;
}
Production:
size of the queue = 6
Utilisez la fonction membre swap
pour échanger le contenu de deux objets de file d’attente en C++
Nous pouvons échanger les éléments de deux objets de file d’attente à l’aide de la fonction membre swap
. Il prend un autre objet file d’attente comme seul argument et échange son contenu avec l’objet appelant. Notez que l’objet argument a affecté le contenu de la file d’attente des appelants.
#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;
}
Production:
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,
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook