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++.
Desafio
FácilCrie 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
nrepresentando o número de cidades - Em seguida,
nstrings representando os nomes das cidades
Seu programa deve:
- Criar um
std::vector<std::string>chamadocities - Usar
push_back()para adicionar cada um dosnnomes de cidades ao vetor - Usar um loop for baseado em intervalo para iterar pelo vetor
- Para cada cidade no loop, imprimir o nome da cidade seguido por seu comprimento usando o método
.length() - 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;
}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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa