Fácil C++

Percorrendo um vetor com iteradores

Enunciado

Escreva um programa que crie um std::vector<int> com os valores {2, 4, 6, 8, 10} e use iteradores (begin() e end()) para imprimir cada elemento separado por espaço, em uma única linha.

Requisitos

  • Usar std::vector<int> com os valores indicados.
  • Percorrer o vetor usando iteradores (não use for baseado em intervalo).
  • Imprimir os elementos na ordem original, separados por espaço.

Código inicial

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v{2, 4, 6, 8, 10};
    // Seu código aqui
    return 0;
}

Saída esperada

2 4 6 8 10
Ver dica

Use um laço for com auto it = v.begin(); it != v.end(); ++it e imprima *it.

Mostrar solução
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v{2, 4, 6, 8, 10};

    // Itera do início (begin) até o fim (end)
    for (auto it = v.begin(); it != v.end(); ++it) {
        std::cout << *it << ' ';
    }
    std::cout << '\n';

    return 0;
}

Passo a passo

  1. Criamos um std::vector<int> com os valores {2, 4, 6, 8, 10}.
  2. O laço for inicializa it com v.begin(), que aponta para o primeiro elemento (2).
  3. A condição it != v.end() verifica se ainda não chegamos ao fim (posição após o último elemento).
  4. O incremento ++it avança o iterador para o próximo elemento.
  5. Dentro do laço, *it acessa o valor apontado e o imprime seguido de um espaço.
  6. Ao final, imprimimos uma quebra de linha para finalizar a saída.

Por que funciona

O par begin()/end() define um intervalo semiaberto [begin, end). O laço percorre exatamente todos os elementos, pois começa no primeiro e para quando o iterador alcança a posição após o último. Essa é a forma idiomática de percorrer contêineres com iteradores em C++.

Erros comuns

  • Usar it <= v.end(): como end() aponta para uma posição inválida, a comparação <= pode levar a comportamento indefinido. Use sempre !=.
  • Esquecer de incrementar o iterador: o laço entra em loop infinito. Certifique-se de incluir ++it.
  • Desreferenciar end(): *v.end() é comportamento indefinido. O laço deve parar antes de desreferenciar o fim.

Outra forma de resolver

Usar for baseado em intervalo (for (int x : v)) é mais simples, mas não exercita iteradores explicitamente. Para este exercício, a versão com iteradores é a pedida.

Saída esperada

2 4 6 8 10