Menu
Coddy logo textTech

Loop For Baseado em Intervalo

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 15 de 56.

Embora os loops for tradicionais com índices funcionem bem para iterar através de vetores, o C++ oferece uma solução mais elegante: o loop for baseado em intervalo (range-based for loop). Esta sintaxe moderna elimina a necessidade de gerenciamento manual de índices e torna seu código mais limpo e fácil de ler.

O loop for baseado em intervalo (range-based for loop) lida automaticamente com os detalhes da iteração para você. Em vez de gerenciar uma variável de índice, você simplesmente especifica o que deseja fazer com cada elemento:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}

Este loop faz exatamente a mesma coisa que a abordagem tradicional baseada em índices, mas com uma sintaxe muito mais simples. A variável name assume automaticamente o valor de cada elemento no vetor, um de cada vez.


Observe o & em const std::string& name. Aqui, & não significa "endereço de" como você pode ter visto antes — em uma declaração de variável como esta, ele significa referência (ou alias). Em vez de copiar cada elemento, name torna-se um alias que se refere diretamente ao elemento no vetor, semelhante ao uso de um ponteiro, mas sem a necessidade de desreferenciá-lo dentro do corpo do loop.

A palavra-chave const é uma medida de segurança: ela impede que você modifique acidentalmente o elemento através do alias dentro do corpo do loop, mantendo os dados originais do vetor inalterados.

O loop for baseado em intervalo não é apenas mais legível, mas também mais seguro — não há risco de erros de índice, já que você não está gerenciando os índices manualmente. Ele funciona com qualquer contêiner que suporte iteração, tornando-o uma ferramenta versátil para processar coleções de dados em C++.

challenge icon

Desafio

Fácil

Crie um programa que demonstre o loop for baseado em intervalo (range-based for loop) processando uma coleção de nomes de cidades e exibindo-os com suas contagens de caracteres.

As seguintes entradas serão fornecidas:

  • Um inteiro n representando o número de cidades
  • Em seguida, n strings representando nomes de cidades

Seu programa deve:

  1. Criar um std::vector<std::string> chamado cities
  2. Usar push_back() para adicionar cada um dos n nomes de cidades ao vetor
  3. Usar um loop for baseado em intervalo para iterar pelo vetor
  4. Para cada cidade no loop, imprimir o nome da cidade seguido por seu comprimento usando o método .length()
  5. Após o loop, imprimir o número total de cidades processadas usando o método .size() do vetor

Use o seguinte formato de saída exato:

City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]

O loop for baseado em intervalo deve usar a sintaxe for (const std::string& city : cities) para iterar por cada elemento no vetor. Use city.length() para obter o número de caracteres em cada nome de cidade.

Folha de consulta

O loop for baseado em intervalo (range-based for loop) itera através de um contêiner sem gerenciamento manual de índices:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}
  • & declara name como uma referência (apelido) para cada elemento — sem cópia
  • const evita a modificação acidental do elemento dentro do corpo do loop
  • Funciona com qualquer contêiner que suporte iteração

Experimente você mesmo

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // Lê o número de cidades
    int n;
    cin >> n;
    
    // Cria um vetor para armazenar os nomes das cidades
    vector<string> cities;
    
    // Lê os nomes das cidades e os adiciona ao vetor
    for (int i = 0; i < n; i++) {
        string city;
        cin >> city;
        cities.push_back(city);
    }
    
    // TODO: Escreva seu código abaixo
    // Use um loop for baseado em intervalo para iterar pelo vetor de cidades
    // Imprima cada cidade com seu comprimento usando o formato especificado
    // Após o loop, imprima o número total de cidades processadas
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo