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 elementIteradores 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
- Categorias de iteradores: input, forward, bidirectional, random
- Padrões comuns de iteradores: begin, end, advance
- Introdução à biblioteca de intervalos do C++20
- Adaptadores de intervalos: views::filter, transform, take