Annuaire d'articles
Partie I Attention
queue<T>
Les données de l'adaptateur de conteneur sont organisées de manière FIFO (First in First Out), ce qui peut être imaginé comme une équipe de personnes attendant de faire de l'acide nucléique.- le fichier d'en-tête doit être inclus
#include <queue>
- Le fichier d'en-tête
queue
définit non seulementqueue
, mais définit égalementpriority_queue
. priority_queue<T>
: file d'attente prioritaire, qui estqueue
différente de celle en ce sens que nous pouvons personnaliser la priorité des données qu'elle contient, de sorte que la file d'attente prioritaire soit devant la file d'attente et que la priorité soit hors de la file d'attente. La valeur par défaut est l'ordre décroissant, la grande pile racine et le plus grand élément à la tête de l'équipe.pop()
Supprime le premier élément de la file d'attente, mais ne renvoie rien.
Part.II Fonction
Chap.I file d'attente
queue
L'objet est très simple, il n'a que 9 fonctions, comme le montre la figure ci-dessous :
Voici une description de chaque fonction :
fonction | expliquer |
---|---|
front() |
Renvoie une référence au premier élément de la file d'attente. Si la file d'attente est constante, une référence const est renvoyée ; si la file d'attente est vide, la valeur de retour est indéfinie. |
back() |
Renvoie une référence au dernier élément de la file d'attente. Si la file d'attente est constante, une référence const est renvoyée ; si la file d'attente est vide, la valeur de retour est indéfinie. |
push(const T& obj) |
Ajoute une copie de l'élément à la fin de la file d'attente. Cela se push_back() fait en appelant les fonctions membres du conteneur sous-jacent. |
push(T&& obj) |
Ajoute des éléments à la fin de la file d'attente de manière décalée. push_back() Cela se fait en appelant les fonctions membres du conteneur sous-jacent qui ont des paramètres de référence rvalue . |
pop() |
Supprime le premier élément de la file d'attente, ne renvoie rien. |
size() |
Renvoie le nombre d'éléments dans la file d'attente. |
empty() |
Renvoie true s'il n'y a aucun élément dans la file d'attente. |
emplace() |
Invoquer le constructeur de T avec les arguments passés à emplace() produit des objets à la fin de la file d'attente. |
swap(queue<T> &other_q) |
Échangez les éléments de la file d'attente actuelle avec les éléments de la file d'attente de paramètres. Ils doivent contenir des éléments du même type. Vous pouvez également appeler le modèle de fonction global swap() pour accomplir la même opération. |
Chap.II file_prioritaire
priority_queue
Les fonctions des objets et queue
des objets ne sont pas les mêmes, et ses fonctions sont quelque peu similaires aux fonctions de la pile, comme suit :
fonction | signification |
---|---|
push(const T& obj) |
Met une copie de obj en place dans le conteneur, incluant généralement une opération de tri. |
push(T&& obj) |
Placez obj dans la position appropriée dans le conteneur, ce qui inclut généralement une opération de tri. |
emplace(T constructor a rgs...) |
Construit un T objet à la position appropriée dans la séquence en appelant le constructeur passé dans les arguments. Pour maintenir l'ordre de priorité, une opération de tri est généralement requise. |
top() |
Renvoie une référence au premier élément de la file d'attente prioritaire. |
pop() |
Retirez le premier élément. |
size() |
Renvoie le nombre d'éléments dans la file d'attente. |
empty() |
Renvoie vrai si la file d'attente est vide. |
swap(priority_queue<T>& other) |
Permutés avec les éléments de l'argument, les objets contenus doivent être du même type. |
Code de la partie III
Ce qui suit est un exemple simple écrit par l'auteur pour apprendre cette structure de données.
Chap.I file d'attente
Le code complet est le suivant :
#include <iostream>
#include <iomanip>
#include <queue>
using namespace std;
int main()
{
int tmp=0;
queue<int> que({
0,1,2,3}); // queue<int> que;
queue<int> que1({
0,1,2,3});
cout<< que.back() << setw(3) << que.front() <<endl;
que.push(4);
que.emplace(5);
cout<< que.back() << setw(3) << que.front() << setw(3) << que.size() <<endl;
que.pop();
cout<< que.back() << setw(3) << que.front() << setw(3) << que.size() <<endl;
que.swap(que1);
cout<< que.back() << setw(3) << que.front() << setw(3) << que.size() <<endl;
getchar();
return 0;
}
La sortie est la suivante :
3 0
5 0 6
5 1 5
3 0 4
Chap.II file_prioritaire
Le code complet est le suivant :
#include <iostream>
#include <iomanip>
#include <queue>
#include <vector>
using namespace std;
int main()
{
int tmp=0;
string st[]={
"one","two","three","four","five","six","seven"};
priority_queue<string, vector<string>, greater<string>> pq; // priority_queue<string> que;
priority_queue<string, vector<string>, greater<string>> pq1;
for(auto& c:st) {
pq.push(c); }
pq1=pq;
while(!pq.empty()) {
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
cout<<setw(3)<<pq.size()<<setw(3)<<pq1.size()<<endl;
pq.swap(pq1);
cout<<setw(3)<<pq.size()<<setw(3)<<pq1.size()<<endl;
getchar();
return 0;
}
La sortie est la suivante :
five four one seven six three two
0 7
7 0
Regardez priority_queue
le constructeur :
priority_queue<T> p; //默认降序,大根堆,队头元素最大
priority_queue<T, vector<T>, less<T>> p; //相当于默认
priority_queue<T, vector<T>, greater<T>> p; //升序,最小值优先级队列,小根堆
priority_queue<string, vector<string>, greater<string>> pq
- Le premier paramètre est un objet fonction utilisé pour trier les éléments
- Le deuxième paramètre est un conteneur fournissant l'élément initial
- Le troisième paramètre spécifie les règles de tri
Tout le reste est plus facile à comprendre.