Usa contenitore elenco STL in C++ STL

Jinku Hu 12 ottobre 2023
  1. Usa std::list<T> per dichiarare l’oggetto contenitore elenco in C++
  2. Utilizzare la funzione insert() per inserire elementi in una posizione specificata nella lista in C++
  3. Usa la funzione swap() per scambiare elementi di due elenchi in C++
  4. Usa la funzione merge() per unire due elenchi ordinati in uno
Usa contenitore elenco STL in C++ STL

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;
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C++ List