Cos'è un std :: list?
In C ++, lo std :: list fa riferimento a un contenitore di archiviazione. Lo std: list ti consente di inserire e rimuovere elementi da qualsiasi luogo. Lo std :: list è implementato come un elenco a doppio collegamento. Ciò significa che è possibile accedere ai dati dell'elenco in modo bidirezionale e sequenziale.
L'elenco della libreria di modelli standard non supporta l'accesso casuale veloce, ma supporta l'accesso sequenziale da tutte le direzioni.
È possibile disperdere gli elementi della lista in diversi blocchi di memoria. Le informazioni necessarie per l'accesso sequenziale ai dati sono archiviate in un contenitore. Lo std :: list può espandersi e ridursi da entrambe le estremità secondo necessità durante il runtime. Un allocatore interno soddisfa automaticamente i requisiti di archiviazione.
In questo tutorial C ++ imparerai:
- Cos'è un std :: list?
- Perché usare std :: list?
- Sintassi elenco
- Funzioni di elenco C ++
-
- Costruttori
- Proprietà del contenitore
- Inserimento in un elenco
- Eliminazione da un elenco
Perché usare std :: list?
Ecco i motivi per utilizzare std :: List:
- Lo std :: list si confronta meglio con altri contenitori di sequenze come array e vector.
- Hanno prestazioni migliori nell'inserimento, spostamento ed estrazione di elementi da qualsiasi posizione.
- Lo std :: list fa anche meglio con gli algoritmi che eseguono tali operazioni in modo intensivo.
Sintassi elenco
Per definire lo std :: list, dobbiamo importare il file di intestazione
. Ecco la sintassi della definizione di std :: list:
template < class Type, class Alloc =allocator> class list;
Ecco una descrizione dei parametri di cui sopra:
- T - Definisce il tipo di elemento contenuto.
È possibile sostituire T con qualsiasi tipo di dati, anche i tipi definiti dall'utente.
- Alloc: definisce il tipo di oggetto allocatore.
Questo utilizza il modello di classe dell'allocatore per impostazione predefinita. Dipende dal valore e utilizza un semplice modello di allocazione della memoria.
Esempi 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Produzione:
Ecco uno screenshot del codice:
Spiegazione del codice:
- Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
- Includere il file di intestazione iostream per utilizzare le sue funzioni.
- Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
- Crea un elenco denominato my_list con un set di 4 numeri interi.
- Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
- Stampa i valori dell'elenco sulla console.
- Fine del corpo del ciclo for.
- Fine del corpo della funzione main ().
Funzioni di elenco C ++
Ecco le funzioni comuni std :: list:
Funzione | Descrizione |
inserire() | Questa funzione inserisce un nuovo elemento prima della posizione puntata dall'iteratore. |
respingere() | Questa funzione aggiunge un nuovo elemento alla fine dell'elenco. |
push_front () | Aggiunge un nuovo elemento all'inizio dell'elenco. |
pop_front () | Elimina il primo elemento della lista. |
taglia() | Questa funzione determina il numero di elementi dell'elenco. |
davanti() | A determina i primi elementi della lista. |
indietro() | A determina l'ultimo elemento della lista. |
inversione() | Inverte gli elementi dell'elenco. |
unire () | Unisce due elenchi ordinati. |
Costruttori
Ecco l'elenco delle funzioni fornite dal file di intestazione
:
- Costruttore predefinito std :: list :: list () - Crea una lista vuota, quella, con zero elementi.
- Fill constructor std :: list :: list () - Crea un elenco con n elementi e assegna un valore zero (0) a ciascun elemento.
- Costruttore di intervallo std :: list :: list () - crea un elenco con molti elementi nell'intervallo dal primo all'ultimo.
- Copia costruttore std :: list :: list () - Crea una lista con una copia di ogni elemento contenuto nella lista esistente.
- Move constructor std :: list :: list () - crea un elenco con gli elementi di un altro elenco utilizzando la semantica di spostamento.
- Initializer list constructor std :: list :: list () - Crea un elenco con gli elementi di un altro elenco utilizzando la semantica di spostamento.
Esempio 2:
#include#include using namespace std;int main(void) {list
l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}
Produzione:
Ecco uno screenshot del codice:
Spiegazione del codice:
- Includere il file di intestazione iostream per utilizzare le sue funzioni.
- Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
- Includere lo spazio dei nomi std nel codice per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
- Crea un elenco vuoto denominato l.
- Crea un elenco denominato l1 con un insieme di 3 numeri interi.
- Crea un elenco denominato l2 con tutti gli elementi nell'elenco denominato l1, dall'inizio alla fine.
- Crea un elenco denominato l3 usando la semantica di spostamento. La lista l3 avrà lo stesso contenuto della lista l2.
- Stampa la dimensione dell'elenco denominato l sulla console insieme ad altro testo.
- Stampa del testo sulla console.
- Crea un iteratore denominato e usalo per iterare sugli elementi dell'elenco denominato l2.
- Stampa gli elementi della lista denominata l2 sulla console.
- Stampa del testo sulla console.
- Crea un iteratore denominato e usalo per iterare sugli elementi dell'elenco denominato l3.
- Stampa gli elementi della lista denominata l3 sulla console.
- Il programma deve restituire un valore una volta completato con successo.
- Fine del corpo della funzione main ().
Proprietà del contenitore
Ecco l'elenco delle proprietà del contenitore:
Proprietà | Descrizione |
Sequenza | I contenitori di sequenza ordinano i loro elementi in una rigorosa sequenza lineare. Si accede agli elementi in base alla loro posizione nella sequenza. |
Elenco a doppio collegamento | Ogni elemento contiene informazioni su come individuare gli elementi precedenti e successivi. Ciò consente un tempo costante per le operazioni di inserimento e cancellazione. |
Riconoscitore dell'allocatore | Un oggetto allocatore viene utilizzato per modificare dinamicamente le dimensioni di archiviazione. |
Inserimento in un elenco
Ci sono diverse funzioni che possiamo usare per inserire valori in un elenco. Dimostriamolo:
Esempio 3:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}
Produzione:
Ecco uno screenshot del codice:
Spiegazione del codice:
- Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
- Includere il file di intestazione iostream per utilizzare le sue funzioni.
- Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
- Crea un elenco denominato my_list con un set di 4 numeri interi.
- Inserisci l'elemento 11 all'inizio dell'elenco denominato my_list.
- Inserisci l'elemento 18 alla fine dell'elenco denominato my_list.
- Crea un iteratore e usalo per trovare l'elemento 10 dalla lista my_list.
- Utilizzare un'istruzione if per determinare se l'elemento precedente è stato trovato o meno.
- Inserire l'elemento 21 prima dell'elemento precedente se è stato trovato.
- Fine del corpo dell'istruzione if.
- Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
- Stampa i valori dell'elenco sulla console.
- Fine del corpo del ciclo for.
- Fine del corpo della funzione main ().
Eliminazione da un elenco
È possibile eliminare elementi da un elenco. La funzione cancella () consente di eliminare un elemento o un intervallo di elementi da un elenco.
- Per eliminare un singolo elemento, è sufficiente passare una posizione intera. L'elemento verrà eliminato.
- Per eliminare un intervallo, devi passare l'iteratore iniziale e quello finale. Dimostriamolo.
Esempio 4:
#include#include #include using namespace std;int main() {std::list
my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list ::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}
Produzione:
Ecco uno screenshot del codice:
Spiegazione del codice:
- Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
- Includere il file di intestazione iostream per utilizzare le sue funzioni.
- Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
- Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
- Crea un elenco denominato my_list con un set di 4 numeri interi.
- Stampa del testo sulla console.
- Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
- Stampa i valori dell'elenco sulla console.
- Fine del corpo del ciclo for.
- Crea un iteratore i che punti al primo elemento della lista.
- Utilizzare la funzione erase () indicata dall'iteratore i.
- Stampa del testo sulla console.
- Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
- Stampa i valori dell'elenco sulla console. Questo avviene dopo la cancellazione.
- Fine del corpo del ciclo for.
- Il programma deve restituire un valore dopo il completamento con successo.
- Fine del corpo della funzione main ().
Sommario:
- Lo std :: list è un contenitore di archiviazione.
- Consente l'inserimento e la cancellazione di elementi da qualsiasi luogo a tempo costante.
- È implementato come un doppio collegamento
- È possibile accedere ai dati std :: list in modo bidirezionale e sequenziale.
- std :: list non supporta l'accesso casuale veloce. Tuttavia, supporta l'accesso sequenziale da tutte le direzioni.
- Puoi spargere gli elementi della lista di std :: list in diversi blocchi di memoria.
- È possibile ridurre o espandere std :: list da entrambe le estremità in base alle esigenze durante il runtime.
- Per inserire elementi in std :: list, usiamo la funzione insert ().
- Per eliminare elementi dalla lista std ::, usiamo la funzione erase ().