std::elenco in C++ con l'esempio

Cos'è una std::list?

In C++, std::list si riferisce 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 doppiamente collegato. Ciò significa che è possibile accedere ai dati dell'elenco in modo bidirezionale e sequenziale.

L'elenco della libreria modelli standard non supporta l'accesso casuale veloce, ma supporta l'accesso sequenziale da tutte le direzioni.

Puoi sparpagliare gli elementi dell'elenco 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.

Perché usare std::list?

Ecco i motivi per utilizzare std::List:

  • Lo std::list è migliore rispetto ad altri contenitori di sequenze come array e vettore.
  • Hanno prestazioni migliori nell'inserimento, spostamento ed estrazione di elementi da qualsiasi posizione.
  • Lo std::list funziona meglio anche con gli algoritmi che eseguono tali operazioni in modo intensivo.

Sintassi dell'elenco

Per definire std::list, dobbiamo importare il file file di intestazione. Ecco la sintassi della definizione std::list:

template < class Type, class Alloc =allocator<T> > 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 quelli definiti dall'utente.
  • Alloc: definisce il tipo dell'oggetto allocatore. Per impostazione predefinita utilizza il modello della classe allocatore. Dipende dal valore e utilizza un semplice modello di allocazione della memoria.

Esempi 1

#include <algorithm>
#include <iostream>
#include <list>
int main() {
	std::list<int> my_list = { 12, 5, 10, 9 };

	for (int x : my_list) {
		std::cout << x << '\n';
	}
}

Produzione:

std::lista

Ecco uno screenshot del codice:

std::lista

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 al corpo di questa funzione.
  5. Crea un elenco denominato my_list con un set di 4 numeri interi.
  6. Utilizza 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 per loop.
  9. Fine del corpo della funzione main().

C++ Elenco funzioni

Ecco le funzioni std::list comuni:

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 in primo piano all'elenco.
pop_front() Elimina il primo elemento dell'elenco.
dimensione() Questa funzione determina il numero di elementi della lista.
davanti() Per determina i primi elementi dell'elenco.
indietro() Per determina l'ultimo elemento dell'elenco.
inversione() Inverte gli elementi dell'elenco.
unire() Unisce due elenchi ordinati.

Costruttori

Ecco la lista di funzioni fornito dal file di intestazione:

  • Costruttore predefinito std::list::list()- Crea una lista vuota, quella, con zero elementi.
  • Costruttore di riempimento std::list::list()- Crea una lista con n elementi e assegna un valore pari a zero (0) a ciascun elemento.
  • Costruttore di intervalli std::list::list()- crea un elenco con molti elementi nell'intervallo dal primo all'ultimo.
  • Costruttore di copia std::list::list()- Crea una lista con una copia di ogni elemento contenuto nella lista esistente.
  • Move costruttore std::list::list()- crea una lista con gli elementi di un'altra lista utilizzando la semantica di spostamento.
  • Costruttore di elenchi di inizializzatori std::list::list()-Crea un elenco con gli elementi di un altro elenco utilizzando la semantica di spostamento.

esempio 2

#include <iostream>
#include <list>
using namespace std;
int main(void) {
	list<int> l;
	list<int> l1 = { 10, 20, 30 };
	list<int> l2(l1.begin(), l1.end());
	list<int> 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:

elenco Costruttori

Ecco uno screenshot del codice:

elenco Costruttori

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 al corpo di questa funzione.
  5. Crea un elenco vuoto denominato l.
  6. Crea una lista denominata l1 con un set di 3 numeri interi.
  7. Crea una lista denominata l2 con tutti gli elementi della lista denominata l1, dall'inizio alla fine.
  8. Crea un elenco denominato l3 utilizzando 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 scorrere gli 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 scorrere gli elementi dell'elenco denominato l3.
  15. Stampa gli elementi della lista denominata l3 sulla console.
  16. Il programma deve restituire valore in caso di completamento positivo.
  17. Fine del corpo della funzione main().

Proprietà del contenitore

Ecco l'elenco delle proprietà del contenitore:

Immobili Descrizione
Sequenza I contenitori di sequenza ordinano i loro elementi in una sequenza lineare rigorosa. Si accede agli elementi in base alla loro posizione nella sequenza.
Elenco doppiamente collegato Ogni elemento ha informazioni su come individuare gli elementi precedenti e successivi. Ciò consente un tempo costante per le operazioni di inserimento e cancellazione.
Consapevole dell'allocatore Un oggetto allocatore viene utilizzato per modificare dinamicamente la dimensione di archiviazione.

Inserimento in un elenco

Esistono diverse funzioni che possiamo utilizzare per inserire valori in una lista. Dimostriamolo:

esempio 3

#include <algorithm>
#include <iostream>
#include <list>
int main() {
	std::list<int> 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:

Inserimento in un elenco

Ecco uno screenshot del codice:

Inserimento in un elenco

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 al 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. Utilizza 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, si passano gli iteratori iniziale e finale. Dimostriamolo.

esempio 4

#include <algorithm>
#include <iostream>
#include <list>
using namespace std;
int main() {
	std::list<int> my_list = { 12, 5, 10, 9 };
	cout << "List elements before deletion: ";
	for (int x : my_list) {
		std::cout << x << '\n';
	}
	list<int>::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:

Eliminazione da un elenco

Ecco lo screenshot del codice:

Eliminazione da un elenco

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. Includi 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 al 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. Utilizza 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 punta al primo elemento della lista.
  12. Utilizzare la funzione erase() puntata dall'iteratore i.
  13. Stampa del testo sulla console.
  14. Utilizza 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 in caso di completamento positivo.
  18. Fine del corpo della funzione main().

Sommario

  • Lo std::list è un contenitore di archiviazione.
  • Consente l'inserimento e l'eliminazione di elementi da qualsiasi luogo in un momento costante.
  • È implementato come 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 sparpagliare gli elementi dell'elenco di std::list in diversi blocchi di memoria.
  • Puoi ridurre o espandere std::list da entrambe le estremità secondo necessità durante il runtime.
  • Per inserire elementi in std::list, utilizziamo la funzione insert().
  • Per eliminare elementi da std::list, utilizziamo la funzione erase().