Menu
Coddy logo textTech

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++.

challenge icon

Défi

Facile

Cré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 n représentant le nombre de villes
  • Ensuite, n chaînes de caractères représentant les noms des villes

Votre programme doit :

  1. Créer un std::vector<std::string> nommé cities
  2. Utiliser push_back() pour ajouter chacun des n noms de villes au vecteur
  3. Utiliser une boucle for basée sur une plage pour itérer à travers le vecteur
  4. Pour chaque ville dans la boucle, afficher le nom de la ville suivi de sa longueur en utilisant la méthode .length()
  5. 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éclare name comme une référence (alias) vers chaque élément — pas de copie
  • const empê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;
}
quiz iconTestez-vous

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