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

Você pode notar o símbolo & na declaração do loop — const std::string& name. Neste contexto, & não significa "endereço de" como você pode ter visto antes. Aqui ele declara name como uma referência (um apelido) diretamente para cada elemento no vetor, em vez de fazer uma cópia dele. Pense nisso como dar um novo nome ao mesmo pedaço de dado — semelhante a usar um ponteiro para o elemento, 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 por meio do alias dentro do corpo do loop. O próprio alias ainda avança para cada novo elemento a cada iteração — é o conteúdo que você está acessando através do alias que é mantido constante, não a progressão do loop.

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 í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 número inteiro n representando o número de cidades
  • Em seguida, n strings representando os nomes das 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.

Experimente você mesmo

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

int main() {
    // Ler o número de cidades
    int n;
    cin >> n;
    
    // Criar um vetor para armazenar os nomes das cidades
    vector<string> cities;
    
    // Ler os nomes das cidades e adicioná-los 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