Uno, esquema STL
En primer lugar, sabemos la intención original de la configuración STL . Cuando los programadores implementamos algunos programas, podemos usar repetidamente algunas estructuras de datos y algoritmos. El stl que queremos decir es la estructura de datos que se usa muchas veces. Empaquetamos en STL , y luego llamarlo, lo que nos facilitará completar la realización de la estructura de datos y el diseño del programa.
Los contenedores STL comunes son:
LIST lista de doble enlace, matriz dinámica VECTOR, cola QUEUE, pila STACK. . .
Dos, LIST contenedor de lista de doble enlace
1. La estructura de almacenamiento de la estructura de datos.
El método de almacenamiento del contenedor de lista de enlaces dobles es similar al de la lista de enlaces dobles. Cuando lo use, simplemente use esta estructura de lista enlazada como una lista enlazada de uso común.
2. Uso de la lista
1, la creación de lista enlazada
Crear una lista vacía: lista <estructura de datos> nombre de variable
Crear una lista enlazada constante: lista <> nombre (varios, valor constante);
crear una estructura de datos que importe otros tiposLista enlazada: lista <> na (na2)
otras importaciones usando iteradores
//数组迭代器
#include <iostream>
#include <list>
using namespace std ;
int main ()
{
int q[10] = {
1,2,3,45,6,7,8,9,3} ;
list <int> sq(q , q + 10) ;
for(int e : sq)
{
cout << e << endl ;
}
return 0 ;
}
2, Empujando la lista enlazada, borrando operaciones básicas
∗ ∗ Empujando la lista enlazada∗ ∗ **Empujando la lista enlazada**∗∗Empuje de lista enlazada∗∗
Empuje de cabeza: nombre.push_front()
Empuje de cola: nombre.push_back()
#include <iostream>
#include <list>
using namespace std ;
int main ()
{
int q[10] = {
1,2,3,45,6,7,8,9,3} ;
list <int> sq(q , q + 10) ;
sq.push_back(1314);//back
sq.push_front( 34);
//front
for(int e : sq)
{
cout << e << endl ;
}
return 0 ;
}
∗ ∗ ventana emergente de lista enlazada∗ ∗ **ventana emergente de lista enlazada**∗∗pop de lista enlazada∗∗
Pop de cabeza: pop_front ()
Pop de cola: pop_back ()
#include <iostream>
#include <list>
using namespace std ;
int main ()
{
int q[10] = {
1,2,3,45,6,7,8,9,3, 34} ;
list <int> sq(q , q + 10) ;
sq.push_back(1314);
sq.push_front( 34);
sq.pop_back() ;
sq.pop_front() ;
sq.pop_back() ;
for(int e : sq)
{
cout << e << endl ;
}
return 0 ;
}
El resto de las operaciones requieren la operación de un iterador, así que echemos un vistazo primero a la operación del iterador.
Iterador:
para la implementación del iterador de lista enlazada de lista
Común c.begin(), c.end() Un nodo principal, un nodo final
————————————————————— —————————————————————
Operación de búsqueda del iterador intermedio:
use el iterador para atravesar la lista de almacenamiento < >:: iterador
para encontrar la dirección: use la función ffind ( nodo frontal, reverso punto de nodo, valor)
∗ ∗ Inserción de lista enlazada∗ ∗ **Inserción de lista enlazada**∗∗Inserción de lista enlazada∗∗
#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main ()
{
int q[10] = {
1,2,3,45,6,7,8,9,3, 34} ;
list <int> sq(q , q + 10) ;
sq.push_back(1314);
sq.push_front( 34);
sq.pop_back() ;
sq.pop_front() ;
sq.pop_back() ;
list<int> :: iterator pos = find(sq.begin() , sq.end() , 2) ;
//指针的存储 iterator
sq.insert(pos, 2324) ;
//压入操作
for(int e : sq)
{
cout << e << endl ;
}
return 0 ;
}
∗ ∗ Eliminación de lista enlazada∗ ∗ **Eliminación de lista enlazada**∗∗Eliminación de lista enlazada∗∗
#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main ()
{
int q[10] = {
1,2,3,45,6,7,8,9,3, 34} ;
list <int> sq(q , q + 10) ;
sq.push_back(1314);
sq.push_front( 34);
sq.pop_back() ;
sq.pop_front() ;
sq.pop_back() ;
list<int> :: iterator pos = find(sq.begin() , sq.end() , 2) ;
sq.insert(pos, 2324) ;
sq.erase(pos) ;
for(int e : sq)
{
cout << e << endl ;
}
return 0 ;
}
Expansión Algunas ideas y comprensión de los iteradores STL En primer lugar, un iterador es la dirección de memoria de este valor En la estructura de datos, lo que bloqueamos es este nodo, no la ubicación de este nodo
.
∗ ∗ Adquisición de datos de lista enlazada∗ ∗ **Adquisición de datos de lista enlazada**∗∗Adquisición de datos de lista enlazada∗∗
Al adquirir datos primero, la adquisición de la cabeza: frente() y la adquisición de la cola atrás()
3, operaciones clásicas de uso común
tamaño de lista enlazada
cout << sq.size() << endl ;
y uso de la función sort()
lt.sort()
Eliminar el elemento especificado remove()
lt.remove()
3. Recorriendo la lista enlazada
#include <iostream>
#include <list>
using namespace std ;
int main ()
{
int q[10] = {
32,34,3,534,5,4,65,4,65,6} ;
list <int> li(q, q + 9) ;
for( auto e : li)
cout << e << endl ;
return 0 ;
}
Este método transversal es único para varias estructuras de datos.