Ciclo for basato su intervallo
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 15 di 56.
Sebbene i tradizionali cicli for con indici funzionino bene per iterare sui vettori, C++ offre una soluzione più elegante: il ciclo for basato su intervallo. Questa sintassi moderna elimina la necessità di gestire manualmente gli indici e rende il codice più pulito e facile da leggere.
Il ciclo for basato su intervallo gestisce automaticamente i dettagli dell’iterazione per te. Invece di gestire una variabile indice, ti basta specificare cosa vuoi fare con ogni elemento:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << name << std::endl;
}Questo ciclo fa esattamente la stessa cosa dell'approccio tradizionale basato sugli indici, ma con una sintassi molto più semplice. La variabile name assume automaticamente il valore di ciascun elemento del vettore, uno alla volta.
Potresti notare il simbolo & nella dichiarazione del ciclo: const std::string& name. In questo contesto, & non significa «indirizzo di», come potresti aver visto in precedenza. Qui dichiara name come riferimento (un alias) diretto a ciascun elemento del vettore, anziché crearne una copia. Pensalo come assegnare un nuovo nome allo stesso dato, in modo simile all'uso di un puntatore all'elemento, ma senza doverlo dereferenziare all'interno del corpo del ciclo.
La parola chiave const è una misura di sicurezza: ti impedisce di modificare accidentalmente l’elemento tramite l’alias all’interno del corpo del ciclo. L’alias stesso continua comunque ad avanzare a ogni nuovo elemento a ogni iterazione. È il contenuto a cui accedi tramite l’alias a rimanere costante, non l’avanzamento del ciclo.
Il ciclo for basato sugli intervalli non è solo più leggibile, ma anche più sicuro: non c'è il rischio di errori di indice, perché non gestisci gli indici manualmente. Funziona con qualsiasi contenitore che supporti l'iterazione, rendendolo uno strumento versatile per elaborare raccolte di dati in C++.
Sfida
FacileCrea un programma che dimostri il ciclo for basato su intervallo elaborando una raccolta di nomi di città e visualizzandoli con il conteggio dei caratteri.
Verranno forniti i seguenti input:
- Un intero
nche rappresenta il numero di città - Poi
nstringhe che rappresentano i nomi delle città
Il tuo programma dovrebbe:
- Creare un
std::vector<std::string>denominatocities - Usare
push_back()per aggiungere al vettore ciascuno deglinnomi di città - Usare un ciclo for basato su intervallo per scorrere il vettore
- Per ogni città nel ciclo, stampare il nome della città seguito dalla sua lunghezza usando il metodo
.length() - Dopo il ciclo, stampare il numero totale di città elaborate usando il metodo
.size()del vettore
Usa il seguente formato di output esatto:
City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]Il ciclo for basato su intervallo dovrebbe usare la sintassi for (const std::string& city : cities) per scorrere ogni elemento del vettore. Usa city.length() per ottenere il numero di caratteri in ciascun nome di città.
Provalo tu
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// Leggi il numero di città
int n;
cin >> n;
// Crea un vettore per memorizzare i nomi delle città
vector<string> cities;
// Leggi i nomi delle città e aggiungili al vettore
for (int i = 0; i < n; i++) {
string city;
cin >> city;
cities.push_back(city);
}
// TODO: Scrivi il tuo codice qui sotto
// Usa un ciclo for basato su intervallo per scorrere il vettore cities
// Stampa ogni città con la lunghezza del suo nome nel formato specificato
// Dopo il ciclo, stampa il numero totale di città elaborate
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online