0Pricing
C++ Academy · Aula

Categorias de iteradores: input, forward, bidirectional, random

Distinga as categorias de iteradores e escolha algoritmos compatíveis com elas

Categorias de iteradores: input, forward, bidirectional, random é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

O que é um iterador

Um iterador é um ponteiro generalizado. Os algoritmos operam por meio de iteradores, separando-os do contêiner subjacente.

As cinco categorias de iteradores

Os iteradores são classificados por capacidade:

  • Entrada — somente leitura, passagem única
  • Saída — somente escrita, passagem única
  • De avanço — leitura e escrita, várias passagens
  • Bidirecional — pode avançar e retroceder
  • Acesso aleatório — pode saltar usando um deslocamento inteiro

Iteradores de entrada

Leia uma vez, avance e repita. Não é possível voltar. Exemplo: std::istream_iterator.

std::istream_iterator<int> in(std::cin), end;
while (in != end) {
    std::cout << *in << " ";
    ++in;
}

Iteradores de saída

Somente escrita. Exemplos: std::ostream_iterator e std::back_inserter.

std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);

Iteradores de avanço

Como os iteradores de entrada, mas permitem várias passagens — você pode iterar novamente a partir da mesma posição. Exemplo: std::forward_list.

Iteradores bidirecionais

Iteradores de avanço, além de --. Exemplos: std::list, std::map e std::set.

std::list<int> l = {1, 2, 3};
auto it = l.end();
--it;        // OK, points to last element

Iteradores de acesso aleatório

Iteradores bidirecionais com saltos: it + n, it - n, it[k], it1 - it2. Exemplos: std::vector, std::deque e vetores nativos.

Requisitos dos algoritmos

Cada algoritmo especifica a categoria mínima de iterador de que precisa. std::sort exige acesso aleatório; std::find exige apenas entrada.

Características dos iteradores

std::iterator_traits<Iter> expõe o tipo de valor, a categoria e outras propriedades do iterador em tempo de compilação.

using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;

std::advance e std::distance

Mova um iterador ou meça uma distância de forma genérica. Essas funções usam a categoria para obter a implementação mais eficiente.

auto it = v.begin();
std::advance(it, 5);              // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);

Iteradores personalizados

Para escrever o seu próprio iterador, defina os aliases de tipo e as operações exigidos pela categoria escolhida — operator*, operator++, operator== etc.

Conceitos de iteradores do C++20

O C++20 adicionou conceitos formais, como std::input_iterator, std::forward_iterator e std::random_access_iterator. Eles substituem o sistema baseado em tags mais antigo.

Verificação rápida

Qual categoria de iterador permite usar a expressão it + n em tempo constante?

Recapitulação

Os iteradores são categorizados por capacidade — entrada, saída, avanço, bidirecional e acesso aleatório. Os algoritmos exigem uma categoria mínima. Os iteradores de vector têm acesso aleatório; os de list e map são bidirecionais.

Perguntas Frequentes

A aula “Categorias de iteradores: input, forward, bidirectional, random” é grátis?

Sim — o texto completo de “Categorias de iteradores: input, forward, bidirectional, random” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Categorias de iteradores: input, forward, bidirectional, random”?

Distinga as categorias de iteradores e escolha algoritmos compatíveis com elas Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Categorias de iteradores: input, forward, bidirectional, random”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Categorias de iteradores: input, forward, bidirectional, random
  2. Padrões comuns de iteradores: begin, end, advance
  3. Introdução à biblioteca de intervalos do C++20
  4. Adaptadores de intervalos: views::filter, transform, take
← Voltar para C++ Academy