Bereichsbasierte for-Schleife in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der bereichsbasierten for-Schleife zum Drucken von Elementen von std::map in C++
  2. Verwendung der bereichsbasierten for-Schleife zur Ausgabe von Mitgliedern von struct in C++
Bereichsbasierte for-Schleife in C++

Dieser Artikel zeigt verschiedene Methoden zur Verwendung einer bereichsbasierten for-Schleife in C++.

Verwenden der bereichsbasierten for-Schleife zum Drucken von Elementen von std::map in C++

Die bereichsbasierte for-Schleife ist ein besser lesbares Äquivalent zur regulären for-Schleife. Es kann verwendet werden, um das Array oder ein anderes Objekt zu durchlaufen, das Elementfunktionen begin und end hat. Beachten Sie, dass wir das Schlüsselwort auto und den Verweis auf das Element verwenden, um darauf zuzugreifen. In diesem Fall bezieht sich das Element auf das einzelne Element von std::map, das zufällig vom Typ std::pair ist. Für den Zugriff auf die Schlüssel-Wert-Paare ist daher eine spezielle Punktnotation erforderlich, um mit den Schlüsselwörtern first/second auf sie zugreifen zu können.

#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;
}

Ausgabe:

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

Alternativ kann eine bereichsbasierte Schleife mithilfe der strukturierten Bindungsnotation auf Elemente zugreifen und den Codeblock präziser gestalten. Im folgenden Beispiel zeigen wir eine solche Bindungsverwendung für den Zugriff auf std::map-Paare.

#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;
}

Ausgabe:

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

Verwendung der bereichsbasierten for-Schleife zur Ausgabe von Mitgliedern von struct in C++

Strukturierte Bindung kann äußerst nützlich sein, wenn die durchquerten Elemente die relativ größeren Strukturen mit mehreren Datenelementen darstellen. Wie im nächsten Beispielcode gezeigt, werden diese Elemente als Bezeichnerliste deklariert und dann ohne die Notation struct.member direkt referenziert. Beachten Sie, dass die meisten STL-Container mit der bereichsbasierten for-Schleife durchlaufen werden können.

#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;
}

Ausgabe:

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
Autor: 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

Verwandter Artikel - C++ Loop