std::lista em C++ com exemplo

O que รฉ uma lista std::list?

In C++, o std::list refere-se a um contรชiner de armazenamento. O std:list permite inserir e remover itens de qualquer lugar. O std::list รฉ implementado como uma lista duplamente vinculada. Isso significa que os dados da lista podem ser acessados โ€‹โ€‹bidirecionalmente e sequencialmente.

A lista da Biblioteca de Modelos Padrรฃo nรฃo oferece suporte ao acesso aleatรณrio rรกpido, mas oferece suporte ao acesso sequencial de 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.

Por que usar std::list?

Aqui estรฃo os motivos para usar std::List :

  • O std::list se compara melhor a outros contรชineres de sequรชncia, como array e vetor.
  • Possuem melhor desempenho na inserรงรฃo, movimentaรงรฃo e extraรงรฃo de elementos de qualquer posiรงรฃo.
  • O std::list tambรฉm se sai melhor com algoritmos que executam tais operaรงรตes de forma intensiva.

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 dados, atรฉ mesmo tipos definidos pelo usuรกrio.
  • Alloc โ€“ Define o tipo do objeto alocador. Isso usa o modelo de classe alocador por padrรฃo. Depende do valor e usa um modelo simples de alocaรงรฃo de memรณria.

Exemplos 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:

std :: list

Aqui estรก uma captura de tela do cรณdigo:

std :: list

Explicaรงรฃo do cรณdigo:

  1. Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
  3. Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
  4. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
  5. Crie uma lista chamada my_list com um conjunto de 4 inteiros.
  6. Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
  7. Imprima os valores da lista no console.
  8. Fim do corpo do para laรงo.
  9. 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:

listar Construtores

Aqui estรก uma captura de tela do cรณdigo:

listar Construtores

Explicaรงรฃo do cรณdigo:

  1. Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
  3. Inclua o namespace std no cรณdigo para usar suas classes sem chamรก-lo.
  4. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
  5. Crie uma lista vazia chamada l.
  6. Crie uma lista chamada l1 com um conjunto de 3 inteiros.
  7. Crie uma lista chamada l2 com todos os elementos da lista chamada l1, do inรญcio ao fim.
  8. Crie uma lista chamada l3 usando a semรขntica de movimentaรงรฃo. A lista l3 terรก o mesmo conteรบdo da lista l2.
  9. Imprima o tamanho da lista chamada l no console junto com outro texto.
  10. Imprima algum texto no console.
  11. Crie um iterador chamado ele e use-o para iterar sobre os elementos da lista chamada l2.
  12. Imprima os elementos da lista chamada l2 no console.
  13. Imprima algum texto no console.
  14. Crie um iterador chamado ele e use-o para iterar sobre os elementos da lista chamada l3.
  15. Imprima os elementos da lista chamada l3 no console.
  16. O programa deve retornar o valor apรณs a conclusรฃo bem-sucedida.
  17. 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:

Inserindo em uma lista

Aqui estรก uma captura de tela do cรณdigo:

Inserindo em uma lista

Explicaรงรฃo do cรณdigo:

  1. Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
  3. Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
  4. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
  5. Crie uma lista chamada my_list com um conjunto de 4 inteiros.
  6. Insira o elemento 11 no inรญcio da lista chamada my_list.
  7. Insira o elemento 18 no final da lista chamada my_list.
  8. Crie um iterador e use-o para encontrar o elemento 10 da lista my_list.
  9. Use uma instruรงรฃo if para determinar se o elemento acima foi encontrado ou nรฃo.
  10. Insira o elemento 21 antes do elemento acima, se for encontrado.
  11. Fim do corpo da instruรงรฃo if.
  12. Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
  13. Imprima os valores da lista no console.
  14. Fim do corpo do loop for.
  15. Fim do corpo da funรงรฃo main().

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:

Excluindo de uma lista

Aqui estรก a captura de tela do cรณdigo:

Excluindo de uma lista

Explicaรงรฃo do cรณdigo:

  1. Inclua o arquivo de cabeรงalho do algoritmo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho iostream para usar suas funรงรตes.
  3. Inclua o arquivo de cabeรงalho da lista para usar suas funรงรตes.
  4. Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
  5. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
  6. Crie uma lista chamada my_list com um conjunto de 4 inteiros.
  7. Imprima algum texto no console.
  8. Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
  9. Imprima os valores da lista no console.
  10. Fim do corpo do loop for.
  11. Crie um iterador i que aponte para o primeiro elemento da lista.
  12. Use a funรงรฃo erase() apontada pelo iterador i.
  13. Imprima algum texto no console.
  14. Use um loop for para criar uma variรกvel de loop x. Esta variรกvel serรก usada para iterar sobre os elementos da lista.
  15. Imprima os valores da lista no console. Isso ocorre apรณs a exclusรฃo.
  16. Fim do corpo do loop for.
  17. O programa deve retornar um valor apรณs a conclusรฃo bem-sucedida.
  18. Fim do corpo da funรงรฃo main().

Resumo

  • O std::list รฉ um contรชiner de armazenamento.
  • Permite a inserรงรฃo e exclusรฃo de itens de qualquer lugar em tempo constante.
  • ร‰ implementado como um link duplo
  • Os dados std::list podem ser acessados โ€‹โ€‹bidirecionalmente e sequencialmente.
  • std::list nรฃo suporta acesso aleatรณrio rรกpido. No entanto, suporta acesso sequencial de todas as direรงรตes.
  • Vocรช pode espalhar os elementos da lista std::list em diferentes pedaรงos de memรณria.
  • Vocรช pode reduzir ou expandir std::list de ambas as extremidades conforme necessรกrio durante o tempo de execuรงรฃo.
  • Para inserir itens em std::list, usamos a funรงรฃo insert().
  • Para excluir itens do std::list, usamos a funรงรฃo erase().

Resuma esta postagem com: