lists stl
Conheça tudo sobre listas em STL junto com sua implementação.
As listas são recipientes sequenciais. As listas contêm elementos em locais não contíguos. Discutimos matrizes e vetores em nossos tutoriais anteriores.
No caso dos contêineres de vetor e array, como esses contêineres armazenam dados em memória contígua, a operação de inserção no meio desses contêineres mostra-se muito cara, pois temos que deslocar os elementos existentes de acordo para criar espaço para o novo elemento.
=> Veja aqui para explorar a lista completa de tutoriais em C ++.
como iniciar um novo projeto no eclipse
O que você aprenderá:
Visão geral
A lista é um contêiner que supera essa desvantagem dos contêineres de matriz e vetor. Isso nos permite inserir elementos em qualquer lugar da lista sem causar muita sobrecarga. Mas as listas são mais lentas do que os vetores no que diz respeito à travessia.
Neste tutorial, veremos a implementação de listas em STL junto com as várias operações de travessia, manipulação e lista de acesso com exemplos.
Observe que a maioria das operações de lista são semelhantes às de vetores e, portanto, os leitores que já leram nosso tutorial sobre vetores não terão problemas para interpretar os conceitos de lista.
Declaração e inicialização
Para implementar o contêiner de lista e usar todos os seus benefícios, precisamos incluir um arquivo de cabeçalho em nosso programa.
#include
A declaração geral para o recipiente da lista é
std::list listName;
Por exemplo,podemos declarar uma lista chamada ‘mylist’ do tipo int da seguinte maneira:
std::list mylist;
Também podemos inicializar a lista no momento da declaração ou adicionar elementos a ela usando uma das operações que ela suporta.
Vamos ver como podemos inicializar a lista que criamos acima.
std::list mylist = {1, 1, 2, 3, 5};
A inicialização acima será definida na memória conforme mostrado abaixo:
Depois de inicializar a lista, podemos acessar os elementos de uma lista usando um iterador. As funções Iterator ‘início’ e ‘fim’ nos ajudam a percorrer os elementos da lista.
Nota: Iterator para a lista também suporta outros iteradores como iteradores reversos (rbegin, rend), iteradores constantes (cbegin, cend) e iteradores reversos constantes (crbegin, crend) e podem ser usados de maneira semelhante como vetores.
O exemplo a seguir mostra isso.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }
Resultado:
Os elementos da lista são: 1 1 2 3 5
Assim, no exemplo acima, declaramos uma lista da sequência de Fibonacci. Em seguida, declaramos um iterador do mesmo tipo de lista e, em seguida, usando o loop for, imprimimos o conteúdo da lista do início ao fim.
Agora, vamos pular para as operações ou funções que o contêiner de lista em STL nos fornece.
Operações de lista
- Inserir: Usado para inserir um elemento na posição fornecida. Retorna um iterador apontando para o primeiro elemento inserido.
inserir (pos, num_elem, elem)
Onde,
pos => Posição na qual novos elementos devem ser inseridos.
num_elem => Número de elementos a serem inseridos; o padrão é 1.
item => Valor real a ser inserido.
Vamos entender a função de inserção tomando um exemplo.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }
Resultado:
A lista após inserir 1 elemento usando insert () é: 1 1 2 3
Este é um exemplo para inserir apenas um elemento no 4ºposição na lista, que eventualmente é a última posição. Portanto, primeiro, temos uma lista para a qual definimos o iterador apontando para o início da lista. Então, mudamos este iterador para o 4ºposicione e chame insert para inserir 1 elemento.
Também podemos inserir mais de um elemento, especificando o segundo parâmetro na função de inserção. Sempre que não for especificado, o padrão é 1.
- retrocesso :Adiciona um novo elemento no final da lista.
- push_front :Adiciona um novo elemento no início da lista.
Vejamos um exemplo que demonstra o uso das funções push_back e push_front.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Resultado:
Os elementos da lista são: 1 1 2 3
Liste o conteúdo após push_front e push_back: 0 1 1 2 3 5
Neste exemplo, primeiro criamos e listamos todos os dois elementos, um na frente e um atrás usando as funções push_front e push_back, respectivamente. A saída mostra a lista alterada depois que ambas as funções são executadas.
- pop_back :Remove o último elemento da lista, reduzindo assim o tamanho da lista em 1.
- pop_front :Remove o primeiro elemento da lista, reduzindo assim o tamanho da lista em 1.
O exemplo a seguir mostra o uso das operações pop_back e pop_front da lista.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Resultado:
Os elementos da lista são: 1 1 2 3 5
Liste o conteúdo após push_front e push_back: 1 2 3
Conforme descrito na definição de operações, cada uma das operações pop_front e pop_back remove o elemento da frente e do verso da lista, ou seja, o primeiro e o último elemento da lista, respectivamente e, portanto, toda vez que reduz o tamanho da lista em 1.
- Tamanho :Retorna o tamanho da lista, ou seja, o número de elementos na lista.
- vazio :Verifica se a lista está vazia.
- apagar :Remove um elemento ou intervalo de elementos da lista.
- Claro :Remove todos os elementos da lista, aumentando o tamanho para 0.
Dada a seguir é um exemplo para demonstrar o uso de todas as funções acima, ou seja, dimensionar, vazio, apagar e limpar.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Resultado:
Os elementos da lista são: 1 1 2 3 5
tamanho da lista: 5
Lista depois de apagar o primeiro elemento: 1 2 3 5
Novo tamanho da lista: 4
tamanho da lista após limpar: 0
O programa acima demonstra todas as quatro funções relacionadas à capacidade da lista. Vemos que o tamanho da lista diminui em 1 quando apagamos 1 elemento da lista. Quando chamamos uma operação de limpeza na lista, o tamanho é 0, o que significa que todos os elementos da lista são removidos.
- frente :Retorna o valor do primeiro elemento da lista.
- voltar :Retorna o valor do último elemento da lista.
- trocar :Troca o conteúdo de uma lista com o conteúdo de outra lista do mesmo tamanho e tipo.
- marcha ré :Um algoritmo que inverte a lista.
- organizar :Classifica a lista fornecida.
O exemplo a seguir demonstra o uso das funções frente, verso, reverso, classificação e troca.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Resultado:
Os elementos da lista são: 1 1 2 3 5
Na frente da lista: 1
No final da lista: 5
Lista invertida: 5 3 2 1 1
Conteúdo da lista ímpar: 1 3 5 7 9
Depois de trocar
minha lista: 1 3 5 7 9
Lista ímpar: 5 3 2 1 1
Neste código, primeiro, imprimimos os valores da frente e de trás da lista mylist. Em seguida, essa lista é revertida e a lista revertida é impressa. Depois disso, definimos mais uma lista de números ímpares que não está em nenhuma ordem e chamamos o algoritmo ‘Classificar’ para classificar essa lista. Em seguida, trocamos as duas listas usando a função de troca e imprimimos as listas trocadas.
- emenda :Esta função é usada para transferir o conteúdo de uma lista para outra lista em uma posição especificada.
Ambas as listas devem ser do mesmo tipo.
splice (posição, lista);
Onde,
position => Posição na qual o conteúdo da lista deve ser transferido.
list => Lista cujos elementos devem ser transferidos.
O exemplo abaixo mostra o uso da função de emenda.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); }
Resultado:
Os elementos da lista são: 1 1 8 13
lista a ser emendada: 2 3 5
Liste o conteúdo após a emenda na posição 2: 1 1 2 3 5 8 13
O exemplo mostra que usamos duas listas. Primeiro, o iterador de mylist é movido para duas posições e, em seguida, a função splice é chamada para transferir o conteúdo da segunda lista para a terceira posição da primeira lista.
- vai :Ao contrário da função de emenda que pode ser usada para transferir o conteúdo de uma lista para outra em uma posição específica, a operação de mesclagem mescla diretamente duas listas para formar uma única lista. Para a operação de mesclagem, ambas as listas precisam estar em ordem de classificação.
A seguir está um exemplo para demonstrar a função de mesclagem.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Resultado:
Primeira lista: 11 2 3 5 8
Segunda Lista: 4 6 7
Liste o conteúdo após mesclar duas listas:
1 1 2 3 4 5 6 7 8
Portanto, no programa acima, temos duas listas que são classificadas. Chamamos operação de fusão nessas duas listas. A lista resultante é uma lista classificada que contém os elementos de ambas as listas.
melhor cliente ssh para windows 10
Conclusão
Chegamos ao final deste tutorial sobre Listas em STL. Esperamos que este tutorial tenha dado a você imenso conhecimento sobre Listas em STL.
=> Verifique aqui para ver os tutoriais de treinamento A-Z de C ++ aqui.
Leitura recomendada