Cola C++ STL (primero en entrar, primero en salir) explicación detallada de la cola

Parte I Atención

inserte la descripción de la imagen aquí

  • queue<T>Los datos del adaptador del contenedor están organizados en forma FIFO (primero en entrar, primero en salir), que se puede imaginar como un equipo de personas esperando para hacer ácido nucleico.
  • el archivo de encabezado debe ser incluido#include <queue>
  • El archivo de encabezado queueno solo define queue, sino que también define priority_queue.
  • priority_queue<T>: cola de prioridad, que es queuediferente de eso en que podemos personalizar la prioridad de los datos en ella, de modo que la cola de prioridad esté delante de la cola y la prioridad esté fuera de la cola. El valor predeterminado es el orden descendente, la gran pila de raíces y el elemento más grande a la cabeza del equipo.
  • pop()Elimina el primer elemento de la cola, pero no devuelve nada.

Parte II Función

Cap.I cola

queueEl objeto es muy simple, solo tiene 9 funciones, como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí

La siguiente es una descripción de cada función:

función explicar
front() Devuelve una referencia al primer elemento de la cola. Si la cola es constante, se devuelve una referencia constante; si la cola está vacía, el valor devuelto no está definido.
back() Devuelve una referencia al último elemento de la cola. Si la cola es constante, se devuelve una referencia constante; si la cola está vacía, el valor devuelto no está definido.
push(const T& obj) Agrega una copia del elemento al final de la cola. Esto se push_back()hace llamando a las funciones miembro del contenedor subyacente.
push(T&& obj) Agrega elementos al final de la cola de forma alternada. push_back()Esto se hace llamando a las funciones miembro del contenedor subyacente que tienen parámetros de referencia rvalue .
pop() Elimina el primer elemento de la cola, no devuelve nada.
size() Devuelve el número de elementos en la cola.
empty() Devuelve verdadero si no hay elementos en la cola.
emplace() Invocar al constructor de T con los argumentos pasados ​​a emplace() produce objetos al final de la cola.
swap(queue<T> &other_q) Intercambie los elementos de la cola actual con los elementos de la cola de parámetros. Deben contener elementos del mismo tipo. También puede llamar a la plantilla de función global swap() para realizar la misma operación.

Cap.II prioridad_cola

priority_queueLas funciones de los objetos y queuelos objetos no son las mismas, y sus funciones son algo similares a las funciones de la pila, de la siguiente manera:

función significado
push(const T& obj) Coloca una copia de obj en su lugar en el contenedor, que generalmente incluye una operación de ordenación.
push(T&& obj) Coloque obj en la posición adecuada en el contenedor, lo que generalmente incluye una operación de clasificación.
emplace(T constructor a rgs...) Construye un Tobjeto en la posición adecuada de la secuencia llamando al constructor pasado en los argumentos. Para mantener el orden de prioridad, generalmente se requiere una operación de clasificación.
top() Devuelve una referencia al primer elemento de la cola de prioridad.
pop() Retire el primer elemento.
size() Devuelve el número de elementos en la cola.
empty() Devuelve verdadero si la cola está vacía.
swap(priority_queue<T>& other) Intercambiados con los elementos del argumento, los objetos contenidos deben ser del mismo tipo.

Parte III Código

El siguiente es un ejemplo simple escrito por el autor para aprender esta estructura de datos.

Cap.I cola

El código completo es el siguiente:

#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 salida es la siguiente:

3  0
5  0  6
5  1  5
3  0  4

Cap.II prioridad_cola

El código completo es el siguiente:

#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 salida es la siguiente:

five four one seven six three two
  0  7
  7  0

Mira priority_queueel constructor:

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
  • El primer parámetro es un objeto de función que se utiliza para ordenar los elementos.
  • El segundo parámetro es un contenedor que proporciona el elemento inicial.
  • El tercer parámetro especifica las reglas de clasificación.

Todo lo demás es más fácil de entender.

Supongo que te gusta

Origin blog.csdn.net/Gou_Hailong/article/details/128381738
Recomendado
Clasificación