Boucle for basée sur la plage en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la boucle for basée sur une plage pour imprimer les éléments de std::map en C++
  2. Utiliser la boucle for basée sur une plage pour imprimer les membres de struct en C++
Boucle for basée sur la plage en C++

Cet article présente plusieurs méthodes d’utilisation d’une boucle for basée sur une plage en C++.

Utilisez la boucle for basée sur une plage pour imprimer les éléments de std::map en C++

La boucle for basée sur une plage est un équivalent plus lisible de la boucle for régulière. Il peut être utilisé pour parcourir le tableau ou tout autre objet qui a des fonctions membres begin et end. Notez que nous utilisons le mot-clé auto et la référence à l’élément pour y accéder. Dans ce cas, item fait référence à l’élément unique de std::map, qui se trouve être de type std::pair. Ainsi, l’accès aux paires clé-valeur nécessite une notation spéciale par points pour y accéder en utilisant les mots-clés first/second.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};

  for (auto &item : fruit_map) {
    cout << "[" << item.first << "," << item.second << "]\n";
  }

  return EXIT_SUCCESS;
}

Production:

[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]

Alternativement, une boucle basée sur une plage peut accéder aux éléments en utilisant une notation de liaison structurée et rendre le bloc de code plus concis. Dans l’exemple suivant, nous démontrons une telle utilisation de liaison pour accéder aux paires std::map.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};

  for (const auto& [key, val] : fruit_map) {
    cout << "[" << key << "," << val << "]\n";
  }

  return EXIT_SUCCESS;
}

Production:

[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]

Utiliser la boucle for basée sur une plage pour imprimer les membres de struct en C++

La liaison structurée peut être extrêmement utile lorsque les éléments traversés représentent les structures relativement plus grandes avec plusieurs membres de données. Comme le montre l’exemple de code suivant, ces membres sont déclarés sous forme de liste d’identifiants puis référencés directement sans la notation struct.member. Notez que la plupart des conteneurs STL sont traversables en utilisant la boucle for basée sur la plage.

#include <iostream>
#include <list>

using std::cin;
using std::cout;
using std::endl;
using std::list;
using std::string;

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  list<Person> persons = {{"T", "M", 11},
                          {"R", "S", 23},
                          {"J", "R", 43},
                          {"A", "C", 60},
                          {"D", "C", 97}};

  for (const auto& [n, s, age] : persons) {
    cout << n << "." << s << " - " << age << " years old" << endl;
  }

  return EXIT_SUCCESS;
}

Production:

T.M - 11 years old
R.S - 23 years old
J.R - 43 years old
A.C - 60 years old
D.C - 97 years old
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Loop