Usa contenitore elenco STL in C++ STL
-
Usa
std::list<T>
per dichiarare l’oggetto contenitore elenco in C++ -
Utilizzare la funzione
insert()
per inserire elementi in una posizione specificata nella lista in C++ -
Usa la funzione
swap()
per scambiare elementi di due elenchi in C++ -
Usa la funzione
merge()
per unire due elenchi ordinati in uno
Questo articolo dimostrerà più metodi su come utilizzare il contenitore elenco
STL in C++.
Usa std::list<T>
per dichiarare l’oggetto contenitore elenco in C++
Il contenitore std::list
fa parte della libreria di template standard e implementa una struttura dati di elenco che fornisce un inserimento/rimozione a tempo costante di elementi da qualsiasi posizione. Di solito è implementato come un elenco a doppio collegamento e supporta l’iterazione bidirezionale rispetto a std::forward_list
. Il rovescio della medaglia, std::list
non è attrezzato per avere un rapido accesso casuale a elementi come std::vector
o std::deque
. Fornisce solo due funzioni a tempo costante, front
e back
per accedere al primo e all’ultimo elemento. std::list
può essere inizializzato con il tipo di dati specificato e la notazione della lista di inizializzatori comune, come illustrato nel codice di esempio seguente. I metodi push_back
e push_front
possono essere utilizzati per aggiungere elementi a entrambi i lati della lista.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
l1.push_front(15);
printList(l1);
l1.push_back(16);
printList(l1);
return EXIT_SUCCESS;
}
Produzione:
15; 11; 12; 13; 14;
15; 11; 12; 13; 14; 16;
Utilizzare la funzione insert()
per inserire elementi in una posizione specificata nella lista in C++
La funzione membro insert()
può essere utilizzata per aggiungere elementi in una determinata posizione. La funzione ha più overload, il primo dei quali accetta solo due argomenti: l’iteratore e il riferimento all’oggetto. L’elemento dato viene inserito prima dell’elemento a cui punta l’iteratore. Il prossimo frammento di codice mostra come trovare il valore specifico nella lista e quindi inserire l’elemento desiderato prima di esso.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
printList(l1);
auto iter = std::find(l1.begin(), l1.end(), 13);
if (iter != l1.end()) {
l1.insert(iter, 55);
}
printList(l1);
return EXIT_SUCCESS;
}
Produzione:
11; 12; 13; 14;
11; 12; 55; 13; 14;
Usa la funzione swap()
per scambiare elementi di due elenchi in C++
Un’altra utile funzione membro del contenitore std::list
è swap()
che scambia gli elementi dell’oggetto lista con un’altra lista che viene passato come unico argomento. Si noti che questa operazione non sposta o copia i singoli elementi e tutti gli iteratori/riferimenti rimangono validi dopo la chiamata alla funzione.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
std::list<int> l2 = {1, 2, 3, 4, 11};
cout << "l2: ";
printList(l2);
l2.swap(l1);
cout << "l2: ";
printList(l2);
return EXIT_SUCCESS;
}
Produzione:
l2: 1; 2; 3; 4; 11;
l2: 11; 12; 13; 14;
Usa la funzione merge()
per unire due elenchi ordinati in uno
In alternativa, è possibile unire elementi di due elenchi ordinati in uno utilizzando la funzione membro merge
. Si noti che entrambi gli elenchi devono essere ordinati in ordine crescente. merge
prende un riferimento all’oggetto elenco, i cui elementi vengono uniti all’oggetto chiamante. Dopo l’operazione, l’oggetto elenco passato come argomento diventa vuoto. La funzione ordina gli elementi dell’oggetto elenco risultante in ordine crescente, come illustrato nell’esempio di codice seguente.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {8, 10, 2, 4};
std::list<int> l2 = {7, 3, 9, 5, 1};
l2.sort();
l1.sort();
cout << "l2: ";
printList(l2);
l2.merge(l1);
cout << "l2: ";
printList(l2);
return EXIT_SUCCESS;
}
Produzione:
l2: 1; 3; 5; 7; 9;
l2: 1; 2; 3; 4; 5; 7; 8; 9; 10;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook