Padrões comuns de iteradores: begin, end, advance
Use std::begin, std::end, std::advance e iteradores reversos de forma eficaz
Padrões comuns de iteradores: begin, end, advance é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 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.
begin() e end()
Todo contêiner padrão expõe begin() (o primeiro elemento) e end() (uma posição após o último). O intervalo semiaberto [begin, end) é a forma canônica de iterar.
std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}std::begin e std::end
Funções livres em <iterator> que funcionam com qualquer contêiner, incluindo arrays em C.
int arr[] = {1, 2, 3, 4};
for (auto it = std::begin(arr); it != std::end(arr); ++it) {
std::cout << *it << " ";
}cbegin e cend
As versões com c retornam um const_iterator. Use-as quando não precisar modificar os elementos e quiser que o compilador imponha essa restrição.
rbegin e rend
Iteradores reversos. rbegin() aponta para o último elemento; rend(), para uma posição antes do primeiro.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}std::next e std::prev
Retornam um iterador deslocado em relação a outro, sem modificar o original.
auto it = v.begin();
auto next3 = std::next(it, 3); // it + 3
auto prev1 = std::prev(it); // it - 1std::advance
Modifique um iterador no próprio lugar por uma determinada distância. A melhor implementação é selecionada com base na categoria.
auto it = v.begin();
std::advance(it, 5); // moves it forward by 5std::distance
Meça o número de passos entre dois iteradores. O(1) para acesso aleatório e O(n) nos demais casos.
auto d = std::distance(v.begin(), it); // index of itIteradores de inserção
Adaptadores que transformam atribuição em inserção:
std::back_inserter— push_backstd::front_inserter— push_frontstd::inserter— inserir em uma posição
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));Iteradores de fluxo
Use fluxos como intervalos com std::istream_iterator e std::ostream_iterator.
// Read all ints from cin, print to cout
std::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>{},
std::ostream_iterator<int>(std::cout, " ")
);Remoção durante a iteração
Erase retorna o próximo iterador válido. Capture-o e reutilize-o.
for (auto it = v.begin(); it != v.end(); ) {
if (*it < 0) it = v.erase(it);
else ++it;
}Invalidação de iteradores
Modificar um contêiner pode invalidar seus iteradores. Vetores invalidam iteradores ao redimensionar; listas mantêm os iteradores válidos, exceto os dos elementos removidos.
Verificação rápida
Qual função retorna um iterador que aponta para a posição após o último elemento de um contêiner?
Recapitulação
Use begin()/end() para iteração direta e rbegin()/rend() para iteração reversa. std::next, std::prev, std::advance e std::distance funcionam de forma genérica. Os iteradores de inserção adaptam atribuições para inserções.
Perguntas Frequentes
A aula “Padrões comuns de iteradores: begin, end, advance” é grátis?
Sim — o texto completo de “Padrões comuns de iteradores: begin, end, advance” é 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 “Padrões comuns de iteradores: begin, end, advance”?
Use std::begin, std::end, std::advance e iteradores reversos de forma eficaz 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 2 de 4.
Quanto tempo leva a aula “Padrões comuns de iteradores: begin, end, advance”?
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