Introdução ao Iterator em C ++

É possível percorrer dados altamente complexos armazenados em diferentes tipos de contêineres, como uma matriz, vetor etc. no menor tempo de execução, devido ao iterador em C ++, um componente da STL (Standard Template Library). Não se preocupe, é apenas um ponteiro como um objeto, mas é inteligente porque não importa qual contêiner você está usando, tornará seu algoritmo independente do tipo Container, fornecendo uma interface comum para todos os tipos de contêiner, como uma ponte entre algoritmo e contêiner. O Iterator não apenas reduz a complexidade de um programa, como também torna o tempo de execução muito mais rápido.

Por exemplo, o algoritmo sort () que possui dois parâmetros, finalizando e iniciando o iterador, executará a classificação em ordem, independentemente do tipo de contêiner que você estiver usando. O Iterator permite a aplicação de algoritmos genéricos a estruturas de dados. As estruturas de dados podem usar um iterador para expor uma variedade de elementos.

Operações usando o Iterator

  • begin (): Esta função retornará um iterador apontando para o primeiro elemento do contêiner.
  • end (): Esta função retornará um iterador apontando para o passado o último elemento do contêiner.
  • advance (): Esta função incrementará uma posição do iterador para o argumento especificado.
  • next (): Esta função retornará o novo iterador que será apontado pelo iterador após incrementar as posições nos argumentos.
  • previous (): Esta função retornará o novo iterador que será apontado pelo iterador após diminuir as posições nos argumentos.
  • insertter (): Esta função irá inserir o elemento em qualquer posição no contêiner.

Implementação prática

1. Código C ++ para implementar o Iterator

Código

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
std::vector v(1, 2, 3, 4, 5, 6, 7);
//Declaring Iterator
vector::iterator i;
//Function for iterating through vector elements
for(i=v.begin();i!=v.end();i++)
(
std::cout << *i <<" ";
)
return 0;
)

Resultado:

2. Código C ++ para mostrar a funcionalidade do iterador

Código

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
vector v(1, 2, 3, 4, 5, 6, 7, 8);
//Declaring Iterator
vector::iterator i;
//Function
v.insert(v.begin()+1, 10);
for(i=v.begin();i!=v.end();i++) (
cout << *i <<" ";
)
return 0;
)

Resultado:

Categorias do iterador

No C ++ 17, existem 5 tipos diferentes de iteradores que podem ser classificados, dependendo do tipo de funcionalidade, conforme mostrado no fluxograma abaixo:

  • Iterador de entrada (stdin) : devido à funcionalidade limitada, eles são os mais fracos de todos os iteradores com funcionalidade somente leitura e avançar. Não pode modificar o valor do contêiner. Operador de desreferência (*), Operador diferente de (! =), Operador de incremento (++) e Operador igual (==) podem ser usados ​​como iteradores de entrada. Também para operações de entrada seqüencial.
  • Iterador de saída (stdout): Iterador apenas para armazenamento, iterador somente gravação, usado para modificar o valor de um contêiner. Eles também têm funcionalidades muito limitadas. O iterador não pode acessar o elemento O operador de atribuição (=) e o operador de incremento (++) podem ser usados ​​como iteradores de saída. Somente em um algoritmo de passagem única.
  • Iterador de encaminhamento (lista vinculada individual): este iterador contém a funcionalidade dos iteradores de entrada e de saída. Pode avançar na direção com um passo de cada vez. Para ler e gravar em um contêiner, é o iterador mais preferido que suporta a reutilização e o salvamento. Ele suporta todos os operadores acima.
  • Iterador bidirecional (lista duplamente vinculada): como o nome já sugere bidirecional, o que o torna mais forte que os iteradores acima. Ele também suporta leitura e gravação em um contêiner. Ele suporta o operador Decrementar (-).
  • Iterador de acesso aleatório (matrizes): o iterador mais forte é o iterador mais poderoso, pois pode ler, gravar e acessar aleatoriamente. Funcionalidade de ponteiro, como adição e subtração de ponteiro.

Vantagens do Iterator em C ++

Se você precisar mover de um elemento que o iterador está atualmente apontando para outro elemento que está potencialmente n passos do seu iterador atual. Os quatro primeiros na hierarquia levarão uma quantidade linear de tempo para fazer isso, enquanto um iterador de acesso aleatório pode fazer isso em tempo constante e isso é muito mais fascinante, porque é onde o tempo é economizado. É o recurso mais importante que um iterador fornece. Alguns mais são mencionados abaixo

  • Eficiência do código: se tivermos P tipos de contêineres de dados e Q coisas que queremos fazer com eles, acabaremos escrevendo algoritmos P * Q. Se os dados também forem de R tipos diferentes, podemos acabar com o algoritmo P * Q * R. Portanto, usando os iteradores, podemos fazer isso no algoritmo P + Q. Economizamos 90% do tempo e do trabalho. Levando a eficiência do código para o próximo nível. O conceito por trás da eficiência é que o iterador de entrada sobre a fonte e o iterador de saída sobre a sequência de destino não precisam ser do mesmo tipo.
  • Processamento dinâmico: os iteradores têm funcionalidades dinâmicas, como trocar no mesmo contêiner, atribuíveis à cópia, incrementar, desreferenciar e decrementar. O iterador fornece a funcionalidade para remover e adicionar dinamicamente elementos ao contêiner. Como todos os iteradores podem ser incrementados, os iteradores de entrada podem ser comparados e desreferenciados para um valor. Os iteradores bidirecionais podem ser diminuídos. O principal aspecto é escrever uma função e usá-la para qualquer contêiner.

Desvantagens do Iterator em C ++

  • Você não pode passar de uma estrutura de dados para outra ao mesmo tempo de uma maneira complexa. O iterador não funcionará nesse caso.
  • Se você estiver processando uma lista e se esqueceu de algo e agora deseja voltar, não poderá, porque os iteradores não funcionarão dessa maneira.
  • Caso você precise atualizar a estrutura durante o deslocamento, não poderá fazer isso também devido à maneira do iterador de armazenar sua posição.

Conclusão

Enquanto estiver usando iteradores, mantenha essas duas coisas sempre em mente para tornar o código eficiente. Sempre passe o iterador para uma função em vez de contêineres. Você nunca deve devolver contêineres em vez de devolver ou passar no iterador. Você pode obter qualquer elemento usando um iterador, desreferencia e passando um par do iterador para um algoritmo

Artigos recomendados

Este é um guia para o iterador em C ++. Aqui discutimos operações no iterador, categorias, vantagens e desvantagens com códigos e saídas. Você também pode consultar nossos outros artigos relacionados para saber mais.

  1. Matrizes em C ++
  2. O que é C ++
  3. Funções de matriz C ++
  4. Loops em C ++
  5. Funções de matriz PHP | Tipos de funções de matriz em PHP