Menu
Coddy logo textTech

Lista

Lezione 7 di 23 del corso C++ - Libreria standard dei template di Coddy.

List è un contenitore di sequenza integrato in C++ che consente l’allocazione non contigua della memoria. Quando parliamo di una list, intendiamo una lista doppiamente concatenata. Esiste un altro tipo di lista chiamato forward list, che indica una lista semplicemente concatenata. 


Per chiarire tutto. 
La struttura dati vector consente l’allocazione contigua della memoria, ovvero ogni elemento si trova direttamente dopo quello precedente in memoria.
La struttura dati linked list , invece, contiene elementi costituiti da una parte dati (il valore effettivo) e da un puntatore che contiene l’indirizzo di memoria dell’elemento successivo nella lista.

In C++ esistono due tipi di liste concatenate:

  • lista doppiamente concatenata - list
  • lista semplicemente concatenata - forward list

La differenza principale tra la lista doppiamente concatenata e la lista semplicemente concatenata è che le liste semplicemente concatenate possono scorrere solo in avanti: ogni elemento contiene il proprio valore e l’indirizzo di memoria dell’elemento successivo. Gli elementi della lista doppiamente concatenata , invece, memorizzano le informazioni necessarie per individuare l’elemento successivo e quello precedente nella lista.


Usiamo list (lista doppiamente concatenata) e forward list (lista semplicemente concatenata) includendole nel nostro file con:

#include <list>
#include <forward_list>

Oppure includiamo semplicemente il file header bits/stdc++.h.


Forward List

Per prima cosa parleremo di forward list. Esistono molti metodi per la forward list; parleremo dei più utili.
Dichiariamo una forward list esattamente come abbiamo fatto con vector e deque.

forward_list<int> flist = {1, 2, 3};

Possiamo aggiungere elementi usando il metodo push_front() e rimuoverli dall’inizio usando pop_front().

flist.push_front(5);
for (int &x : flist) // stampiamo gli elementi usando un puntatore il cui valore aumenta a ogni iterazione
	cout << x << " ";
cout << endl;

flist.pop_front();
for (int &x : flist)
	cout << x << " ";
Output:
5 1 2 3
1 2 3

Metodi di Forward List

MetodoFunzionalità
insert_after()Inserisce un elemento dopo la posizione specificata
remove()Rimuove l’elemento specificato
assign()Serve per assegnare il valore specificato alla lista; può essere usato anche con due soli numeri interi, per assegnare l’elemento specificato n volte

List

Ora passiamo a list. Anche per la struttura dati list esistono molti metodi, ma vedrai quelli più utili. 
Per prima cosa, imparerai a dichiarare una list dopo averla inclusa all’inizio del file .cpp. 

list<int> list1 = {1, 2, 3};

Possiamo aggiungere elementi alla lista usando il metodo push_front() oppure push_back().
Allo stesso modo, possiamo rimuovere il primo e l’ultimo elemento usando rispettivamente i metodi pop_front() e pop_back().

list1.push_back(4);
list1.push_front(0);
for (int &x : list1)
	cout << x << " ";
cout << endl;

list1.pop_front();
list1.pop_back();
for (int &x : list1)
	cout << x << " ";
Output:
0 1 2 3 4
1 2 3

Metodi di List

MetodoFunzionalità
front()Restituisce il valore del primo elemento della lista
back()Restituisce il valore dell’ultimo elemento della lista
empty()Restituisce se la lista è vuota (1) oppure no (0)
erase()Rimuove un singolo elemento o un intervallo di elementi dalla lista
remove()Rimuove tutti gli elementi dalla lista

 

Provalo tu

Questa lezione non include una sfida di codice.

Tutte le lezioni di C++ - Libreria standard dei template

Esercitati da solo: Compilatore C++ online