Use o contêiner de lista STL em C++ STL
-
Use
std::list<T>
para declarar List Container Object em C++ -
Use a função
insert()
para inserir elementos no local especificado na lista em C++ -
Use a função
swap()
para trocar elementos de duas listas em C++ -
Use a função
merge()
para juntar duas listas ordenadas em uma
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;
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