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.

Bien que les boucles for traditionnelles avec des indices fonctionnent bien pour parcourir les vecteurs, C++ offre une solution plus élégante : la boucle for basée sur range. Cette syntaxe moderne élimine la nécessité de gérer manuellement les index 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, il vous suffit de spécifier 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 un indice, mais avec une syntaxe beaucoup plus simple. La variable name prend automatiquement la valeur de chaque élément du vecteur, un à la fois.

Vous remarquerez peut-être le symbole & dans la déclaration de la boucle : const std::string& name. Dans ce contexte, & ne signifie pas « adresse de », comme vous avez peut-être pu le voir auparavant. Ici, il déclare name comme une référence (un alias) directement vers chaque élément du vecteur, plutôt que d’en créer une copie. Considérez cela comme le fait de donner un nouveau nom à la même donnée, de manière similaire à l’utilisation d’un pointeur vers l’élément, mais sans avoir besoin de le déréférencer dans le 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. L’alias lui-même avance toujours vers chaque nouvel élément à chaque itération. C’est le contenu auquel vous accédez via l’alias qui reste constant, et non la progression de la boucle.

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’erreur d’indice puisque tu ne gères pas les indices manuellement. Elle fonctionne avec tout 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 démontre la boucle for basée sur une plage 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
  • Puis n chaînes 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 parcourir le vecteur
  4. Pour chaque ville de la boucle, afficher le nom de la ville suivi de sa longueur à l’aide de la méthode .length()
  5. Après la boucle, afficher le nombre total de villes traitées à l’aide de 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 parcourir chaque élément du vecteur. Utilisez city.length() pour obtenir le nombre de caractères de chaque nom de ville.

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 de villes
    vector<string> cities;
    
    // Lire les noms de 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é
    // After the loop, print the total number of cities processed
    
    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

Entraînez-vous par vous-même : Compilateur C++ en ligne