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 for tradicionais com índices funcionem bem para iterar por vector, o C++ oferece uma solução mais elegante: o for baseado em intervalo. Essa sintaxe moderna elimina a necessidade de gerenciar índices manualmente 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, basta especificar o que você quer 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 índice, mas com uma sintaxe muito mais simples. A variável name assume automaticamente o valor de cada elemento do vetor, um de cada vez.
Você pode notar o símbolo & na declaração do loop: const std::string& name. Nesse contexto, & não significa "endereço de", como você pode ter visto antes. Aqui, ele declara name como uma referência (um alias) diretamente para cada elemento do vetor, em vez de criar uma cópia dele. Pense nisso como dar um novo nome ao mesmo dado, de forma semelhante ao uso de um ponteiro para o elemento, mas sem precisar 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ê acessa por meio do alias que permanece 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, pois você não gerencia os índices manualmente. Ele funciona com qualquer contêiner que ofereça suporte à iteração, tornando-se 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 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 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 de 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 exato de saída:
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 do 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() {
// Leia o número de cidades
int n;
cin >> n;
// Crie um vetor para armazenar os nomes das cidades
vector<string> cities;
// Leia os nomes das cidades e adicione-os 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 cities
// Imprima cada cidade com seu comprimento usando o formato especificado
// After the loop, print the total number of cities processed
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 TarefaPratique por conta própria: Compilador de C++ online