Use o contêiner de lista STL em C++ STL

Jinku Hu 12 outubro 2023
  1. Use std::list<T> para declarar List Container Object em C++
  2. Use a função insert() para inserir elementos no local especificado na lista em C++
  3. Use a função swap() para trocar elementos de duas listas em C++
  4. Use a função merge() para juntar duas listas ordenadas em uma
Use o contêiner de lista STL em C++ STL

Este artigo demonstrará vários métodos sobre como usar o contêiner STL list em C++.

Use std::list<T> para declarar List Container Object em C++

O contêiner std::list faz parte da biblioteca de modelos padrão e implementa uma estrutura de dados de lista que fornece inserção/remoção em tempo constante de elementos de qualquer posição. Geralmente é implementado como uma lista duplamente vinculada e suporta iteração bidirecional em oposição a std::forward_list. Por outro lado, std::list não está equipado para ter acesso aleatório rápido a elementos como std::vector ou std::deque. Ele fornece apenas duas funções de tempo constante, front e back para acessar o primeiro e o último elemento. std::list pode ser inicializado com o tipo de dado fornecido e a notação de lista de inicializador comum, conforme demonstrado no código de exemplo a seguir. Os métodos push_back e push_front podem ser utilizados para adicionar elementos a qualquer um dos lados da 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;
}

Resultado:

15; 11; 12; 13; 14;
15; 11; 12; 13; 14; 16;

Use a função insert() para inserir elementos no local especificado na lista em C++

A função de membro insert() pode ser usada para adicionar elementos em uma determinada posição. A função tem várias sobrecargas, a primeira das quais leva apenas dois argumentos: o iterador e a referência ao objeto. O elemento fornecido é inserido antes do elemento para o qual o iterador aponta. O próximo trecho de código mostra como encontrar o valor específico na lista e, em seguida, inserir o elemento desejado antes dele.

#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;
}

Resultado:

11; 12; 13; 14;
11; 12; 55; 13; 14;

Use a função swap() para trocar elementos de duas listas em C++

Outra função membro útil do container std::list é swap() que troca os elementos do objeto de lista por outra lista que é passada como o único argumento. Observe que esta operação não move ou copia elementos individuais e todos os iteradores/referências permanecem válidos após a chamada da função.

#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;
}

Resultado:

l2: 1; 2; 3; 4; 11;
l2: 11; 12; 13; 14;

Use a função merge() para juntar duas listas ordenadas em uma

Alternativamente, pode-se juntar elementos de duas listas classificadas em uma usando a função de membro merge. Observe que ambas as listas devem ser classificadas em ordem crescente. merge faz referência ao objeto de lista, elementos dos quais são mesclados ao objeto chamador. Após a operação, o objeto de lista passado como argumento fica vazio. A função ordena os elementos do objeto de lista resultante em ordem crescente, conforme mostrado no exemplo de código a seguir.

#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;
}

Resultado:

l2: 1; 3; 5; 7; 9;
l2: 1; 2; 3; 4; 5; 7; 8; 9; 10;
Autor: 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

Artigo relacionado - C++ List