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++.
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 inteiro
nrepresentando o número de cidades - Em seguida,
nstrings representando nomes de 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.
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;
}&declaranamecomo uma referência (apelido) para cada elemento — sem cópiaconstevita 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;
}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