Boucle For basée sur l'intervalle
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 15 sur 56.
Alors que les boucles for traditionnelles avec des indices fonctionnent bien pour itérer à travers des vecteurs, le C++ offre une solution plus élégante : la boucle for basée sur une plage (range-based for loop). Cette syntaxe moderne élimine le besoin de gestion manuelle des indices et rend votre code plus propre et plus facile à lire.
La boucle for basée sur une plage gère automatiquement les détails de l'itération pour vous. Au lieu de gérer une variable d'index, vous spécifiez simplement ce que vous voulez faire avec chaque élément :
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << name << std::endl;
}Cette boucle fait exactement la même chose que l'approche traditionnelle basée sur l'index, mais avec une syntaxe beaucoup plus simple. La variable name prend automatiquement la valeur de chaque élément du vecteur, un par un.
Remarquez le
& dans const std::string& name. Ici, & ne signifie pas « adresse de » comme vous l'avez peut-être déjà vu — dans une déclaration de variable comme celle-ci, cela signifie référence (ou alias). Au lieu de copier chaque élément, name devient un alias qui fait directement référence à l'élément dans le vecteur, ce qui est similaire à l'utilisation d'un pointeur mais sans avoir besoin de le déréférencer à l'intérieur du corps de la boucle.Le mot-clé
const est une mesure de sécurité : il vous empêche de modifier accidentellement l'élément via l'alias à l'intérieur du corps de la boucle, gardant ainsi les données d'origine du vecteur inchangées.La boucle for basée sur une plage est non seulement plus lisible mais aussi plus sûre — il n'y a aucun risque d'erreurs d'indice puisque vous ne gérez pas les indices manuellement. Elle fonctionne avec n'importe quel conteneur prenant en charge l'itération, ce qui en fait un outil polyvalent pour traiter des collections de données en C++.
Défi
FacileCréez un programme qui illustre la boucle for basée sur une plage (range-based for loop) en traitant une collection de noms de villes et en les affichant avec leur nombre de caractères.
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de villes - Ensuite,
nchaînes de caractères représentant les noms des villes
Votre programme doit :
- Créer un
std::vector<std::string>nommécities - Utiliser
push_back()pour ajouter chacun desnnoms de villes au vecteur - Utiliser une boucle for basée sur une plage pour itérer à travers le vecteur
- Pour chaque ville dans la boucle, afficher le nom de la ville suivi de sa longueur en utilisant la méthode
.length() - Après la boucle, afficher le nombre total de villes traitées en utilisant la méthode
.size()du vecteur
Utilisez le format de sortie exact suivant :
City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]La boucle for basée sur une plage doit utiliser la syntaxe for (const std::string& city : cities) pour itérer à travers chaque élément du vecteur. Utilisez city.length() pour obtenir le nombre de caractères de chaque nom de ville.
Aide-mémoire
La boucle for basée sur l'intervalle parcourt un conteneur sans gestion manuelle des indices :
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << name << std::endl;
}&déclarenamecomme une référence (alias) vers chaque élément — pas de copieconstempêche la modification accidentelle de l'élément à l'intérieur du corps de la boucle- Fonctionne avec n'importe quel conteneur qui prend en charge l'itération
Essayez vous-même
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// Lire le nombre de villes
int n;
cin >> n;
// Créer un vecteur pour stocker les noms des villes
vector<string> cities;
// Lire les noms des villes et les ajouter au vecteur
for (int i = 0; i < n; i++) {
string city;
cin >> city;
cities.push_back(city);
}
// TODO: Écrivez votre code ci-dessous
// Utiliser une boucle for basée sur une plage pour parcourir le vecteur cities
// Afficher chaque ville avec sa longueur en utilisant le format spécifié
// Après la boucle, afficher le nombre total de villes traitées
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche