std::lista em C++ com exemplo
โก Resumo Inteligente
std::lista em C++ ร um contรชiner de sequรชncia implementado como uma lista duplamente encadeada, permitindo inserรงรฃo e exclusรฃo rรกpidas em qualquer posiรงรฃo, armazenando elementos em memรณria nรฃo contรญgua e suportando acesso sequencial bidirecional em vez de acesso aleatรณrio.

O que รฉ uma lista std::list?
In C++A `std::list` refere-se a um contรชiner de armazenamento. A `std::list` permite inserir e remover itens de qualquer lugar. A `std::list` รฉ implementada como uma lista duplamente encadeada. Isso significa que os dados da lista podem ser acessados โโbidirecionalmente e sequencialmente.
A lista da Biblioteca de Modelos Padrรฃo nรฃo suporta acesso aleatรณrio rรกpido, mas suporta acesso sequencial em todas as direรงรตes.
Vocรช pode espalhar os elementos da lista em diferentes partes da memรณria. As informaรงรตes necessรกrias para o acesso sequencial aos dados sรฃo armazenadas em um contรชiner. O std::list pode expandir e diminuir em ambas as extremidades conforme necessรกrio durante o tempo de execuรงรฃo. Um alocador interno atende automaticamente aos requisitos de armazenamento.
Essas caracterรญsticas levantam uma questรฃo prรกtica: quando vocรช deve realmente recorrer a uma lista?
Por que usar std::list?
Eis os motivos para usar std::list:
- A classe `std::list` apresenta melhor desempenho em comparaรงรฃo com outros contรชineres de sequรชncia, como arrays e vetores.
- Eles tรชm um desempenho melhor na inserรงรฃo, movimentaรงรฃo e extracelementos de qualquer posiรงรฃo.
- O std::list tambรฉm se sai melhor com algoritmos que executam tais operaรงรตes de forma intensiva.
Com os motivos esclarecidos, o prรณximo passo รฉ a sintaxe que declara um deles.
Sintaxe da lista
Para definir o std::list, temos que importar o arquivo de cabeรงalho. Aqui estรก a sintaxe de definiรงรฃo std::list:
template < class Type, class Alloc =allocator<T> > class list;
Aqui estรก uma descriรงรฃo dos parรขmetros acima:
- T โ Define o tipo de elemento contido. Vocรช pode substituir T por qualquer tipo de dado, inclusive tipos definidos pelo usuรกrio.
- Alloc โ Define o tipo do objeto alocador. Por padrรฃo, utiliza o modelo de classe alocador. ร dependente de valor e usa um modelo simples de alocaรงรฃo de memรณria.
Exemplo 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
Saรญda:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
- Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
- Crie uma lista chamada my_list com um conjunto de 4 inteiros.
- Usar um para laรงo Para criar uma variรกvel de loop x, essa variรกvel serรก usada para iterar sobre os elementos da lista.
- Imprima os valores da lista no console.
- Fim do corpo do loop for.
- Fim do corpo da funรงรฃo main().
C++ Listar funรงรตes
Aqui estรฃo as funรงรตes std::list comuns:
| funรงรฃo | Descriรงรฃo |
|---|---|
| inserir() | Esta funรงรฃo insere um novo item antes da posiรงรฃo apontada pelo iterador. |
| retrocesso() | Esta funรงรฃo adiciona um novo item no final da lista. |
| push_front() | Adiciona um novo item no inรญcio da lista. |
| pop_front() | Exclui o primeiro item da lista. |
| Tamanho() | Esta funรงรฃo determina o nรบmero de elementos da lista. |
| frente() | Para determina os primeiros itens da lista. |
| de volta() | To determina o รบltimo item da lista. |
| marcha rรฉ() | Ele inverte os itens da lista. |
| mesclar () | Ele mescla duas listas classificadas. |
Construtores
Aqui estรก a lista de funรงรตes fornecida pelo arquivo de cabeรงalho:
- Construtor padrรฃo std::list::list()- Cria uma lista vazia, ou seja, com zero elementos.
- Construtor de preenchimento std::list::list()- Cria uma lista com n elementos e atribui um valor zero (0) a cada elemento.
- Construtor de intervalo std::list::list() - cria uma lista com muitos elementos no intervalo do primeiro ao รบltimo.
- Construtor de cรณpia std::list::list()- Cria uma lista com uma cรณpia de cada elemento contido na lista existente.
- Construtor de movimento std::list::list() - cria uma lista com os elementos de outra lista usando a semรขntica de movimento.
- Construtor de lista inicializador std::list::list() - Ele cria uma lista com os elementos de outra lista usando a semรขntica de movimentaรงรฃo.
Exemplo 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
Saรญda:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
- Inclua o namespace std no cรณdigo para usar suas classes sem chamรก-lo.
- Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
- Crie uma lista vazia chamada l.
- Crie uma lista chamada l1 com um conjunto de 3 inteiros.
- Crie uma lista chamada l2 com todos os elementos da lista chamada l1, do inรญcio ao fim.
- Crie uma lista chamada l3 usando a semรขntica de movimentaรงรฃo. A lista l3 terรก o mesmo conteรบdo da lista l2.
- Imprima o tamanho da lista chamada l no console junto com outro texto.
- Imprima algum texto no console.
- Crie um iterador chamado ele e use-o para iterar sobre os elementos da lista chamada l2.
- Imprima os elementos da lista chamada l2 no console.
- Imprima algum texto no console.
- Crie um iterador chamado ele e use-o para iterar sobre os elementos da lista chamada l3.
- Imprima os elementos da lista chamada l3 no console.
- O programa deve retornar o valor apรณs a conclusรฃo bem-sucedida.
- Fim do corpo da funรงรฃo main().
Propriedades do contรชiner
Aqui estรก a lista de propriedades do contรชiner:
| Propriedade | Descriรงรฃo |
|---|---|
| Seqรผรชncia | Os contรชineres de sequรชncia ordenam seus elementos em uma sequรชncia linear estrita. Os elementos sรฃo acessados โโpor sua posiรงรฃo na sequรชncia. |
| Lista duplamente vinculada | Cada elemento contรฉm informaรงรตes sobre como localizar os elementos anteriores e seguintes. Isso permite um tempo constante para operaรงรตes de inserรงรฃo e exclusรฃo. |
| Consciente do alocador | Um objeto alocador รฉ usado para modificar o tamanho do armazenamento dinamicamente. |
Inserindo em uma lista
Existem diferentes funรงรตes que podemos usar para inserir valores em uma lista. Vamos demonstrar isso:
Exemplo 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
Saรญda:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
- Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
- Crie uma lista chamada my_list com um conjunto de 4 inteiros.
- Insira o elemento 11 no inรญcio da lista chamada my_list.
- Insira o elemento 18 no final da lista chamada my_list.
- Crie um iterador e use-o para encontrar o elemento 10 da lista my_list.
- Use uma instruรงรฃo if para determinar se o elemento acima foi encontrado ou nรฃo.
- Insira o elemento 21 antes do elemento acima, se for encontrado.
- Fim do corpo da instruรงรฃo if.
- Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
- Imprima os valores da lista no console.
- Fim do corpo do loop for.
- Fim do corpo da funรงรฃo main().
Os elementos que entram em uma lista podem ser removidos com a mesma facilidade.
Excluindo de uma lista
ร possรญvel excluir itens de uma lista. A funรงรฃo erase() permite excluir um item ou um intervalo de itens de uma lista.
- Para deletar um รบnico item, basta passar uma posiรงรฃo inteira. O item serรก excluรญdo.
- Para excluir um intervalo, vocรช passa os iteradores inicial e final. Vamos demonstrar isso.
Exemplo 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
Saรญda:
Aqui estรก uma captura de tela do cรณdigo:
Code Explicaรงรฃo:
- Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
- Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
- Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
- Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
- Crie uma lista chamada my_list com um conjunto de 4 inteiros.
- Imprima algum texto no console.
- Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
- Imprima os valores da lista no console.
- Fim do corpo do loop for.
- Crie um iterador i que aponte para o primeiro elemento da lista.
- Use a funรงรฃo erase() apontada pelo iterador i.
- Imprima algum texto no console.
- Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
- Imprima os valores da lista no console. Isso ocorre apรณs a exclusรฃo.
- Fim do corpo do loop for.
- O programa deve retornar um valor apรณs a conclusรฃo bem-sucedida.
- Fim do corpo da funรงรฃo main().






