Std :: list in C ++ con Example

Sommario:

Anonim

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:

  1. Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
  2. Includere il file di intestazione iostream per utilizzare le sue funzioni.
  3. Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
  4. Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
  5. Crea un elenco denominato my_list con un set di 4 numeri interi.
  6. Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
  7. Stampa i valori dell'elenco sulla console.
  8. Fine del corpo del ciclo for.
  9. 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:

  1. Includere il file di intestazione iostream per utilizzare le sue funzioni.
  2. Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
  3. Includere lo spazio dei nomi std nel codice per utilizzare le sue classi senza chiamarlo.
  4. Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
  5. Crea un elenco vuoto denominato l.
  6. Crea un elenco denominato l1 con un insieme di 3 numeri interi.
  7. Crea un elenco denominato l2 con tutti gli elementi nell'elenco denominato l1, dall'inizio alla fine.
  8. Crea un elenco denominato l3 usando la semantica di spostamento. La lista l3 avrà lo stesso contenuto della lista l2.
  9. Stampa la dimensione dell'elenco denominato l sulla console insieme ad altro testo.
  10. Stampa del testo sulla console.
  11. Crea un iteratore denominato e usalo per iterare sugli elementi dell'elenco denominato l2.
  12. Stampa gli elementi della lista denominata l2 sulla console.
  13. Stampa del testo sulla console.
  14. Crea un iteratore denominato e usalo per iterare sugli elementi dell'elenco denominato l3.
  15. Stampa gli elementi della lista denominata l3 sulla console.
  16. Il programma deve restituire un valore una volta completato con successo.
  17. 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:

  1. Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
  2. Includere il file di intestazione iostream per utilizzare le sue funzioni.
  3. Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
  4. Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
  5. Crea un elenco denominato my_list con un set di 4 numeri interi.
  6. Inserisci l'elemento 11 all'inizio dell'elenco denominato my_list.
  7. Inserisci l'elemento 18 alla fine dell'elenco denominato my_list.
  8. Crea un iteratore e usalo per trovare l'elemento 10 dalla lista my_list.
  9. Utilizzare un'istruzione if per determinare se l'elemento precedente è stato trovato o meno.
  10. Inserire l'elemento 21 prima dell'elemento precedente se è stato trovato.
  11. Fine del corpo dell'istruzione if.
  12. Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
  13. Stampa i valori dell'elenco sulla console.
  14. Fine del corpo del ciclo for.
  15. 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:

  1. Includere il file di intestazione dell'algoritmo per utilizzare le sue funzioni.
  2. Includere il file di intestazione iostream per utilizzare le sue funzioni.
  3. Includere il file di intestazione dell'elenco per utilizzare le sue funzioni.
  4. Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
  5. Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno del corpo di questa funzione.
  6. Crea un elenco denominato my_list con un set di 4 numeri interi.
  7. Stampa del testo sulla console.
  8. Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
  9. Stampa i valori dell'elenco sulla console.
  10. Fine del corpo del ciclo for.
  11. Crea un iteratore i che punti al primo elemento della lista.
  12. Utilizzare la funzione erase () indicata dall'iteratore i.
  13. Stampa del testo sulla console.
  14. Usa un ciclo for per creare una variabile di ciclo x. Questa variabile verrà utilizzata per scorrere gli elementi dell'elenco.
  15. Stampa i valori dell'elenco sulla console. Questo avviene dopo la cancellazione.
  16. Fine del corpo del ciclo for.
  17. Il programma deve restituire un valore dopo il completamento con successo.
  18. 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 ().