0Pricing
C++ Academy · Aula

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 - 1

std::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 5

std::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 it

Iteradores de inserção

Adaptadores que transformam atribuição em inserção:

  • std::back_inserter — push_back
  • std::front_inserter — push_front
  • std::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

  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