Heim > Backend-Entwicklung > C++ > Wie funktioniert die bereichsbasierte Iteration mit Standardkarten in C und wie unterscheidet sich die Syntax zwischen den Versionen?

Wie funktioniert die bereichsbasierte Iteration mit Standardkarten in C und wie unterscheidet sich die Syntax zwischen den Versionen?

Mary-Kate Olsen
Freigeben: 2024-10-30 02:49:28
Original
1078 Leute haben es durchsucht

How does range-based iteration work with standard maps in C   and how does the syntax differ across versions?

Bereichsbasierte Iteration von Standardkarten

In C 11 und höher bieten bereichsbasierte for()-Schleifen eine praktische Syntax zum Iterieren durch Container. Allerdings kann ihr Verhalten bei komplexen Datenstrukturen wie Karten verwirrend sein.

Betrachten Sie das folgende Beispiel:

<code class="cpp">std::map<foo, bar> testing = /*...initialized...*/;
for (auto abc : testing) {
  std::cout << abc << std::endl;
}
Nach dem Login kopieren

Was ist der Typ von abc in dieser Schleife? Würde es einen Foo-Schlüssel, einen Balkenwert oder einen Iterator ergeben?

Auflösung

In C 11 und C 14 iterieren bereichsbasierte Schleifen über den Schlüssel einer Karte -Wert-Paare. Der Typ von abc ist daher std::pair. Dies bedeutet, dass jedes Element ein Schlüssel-Wert-Paar und nicht einen einzelnen Schlüssel oder Wert darstellt.

Um den Schlüssel und den Wert separat abzurufen, können Sie das erste und das zweite Mitglied des Paares verwenden:

<code class="cpp">for (auto abc : testing) {
  std::cout << abc.first << " has value " << abc.second << std::endl;
}</code>
Nach dem Login kopieren

Beachten Sie, dass die Variablen in der Schleife normalerweise als const deklariert werden, um anzuzeigen, dass sie den Inhalt der Karte nicht ändern.

C 17 und darüber hinaus

In C 17 wird eine praktische Kurznotation für die bereichsbasierte Iteration von Karten eingeführt:

<code class="cpp">for (const auto& [key, value] : testing) {
  std::cout << key << " has value " << value << std::endl;
}</code>
Nach dem Login kopieren

Diese Syntax ersetzt das erste und zweite Element direkt durch Schlüssel und Wert. Dies ermöglicht einen saubereren und prägnanteren Ausdruck der Iteration über Schlüssel-Wert-Paare.

Zusätzliche Überlegungen

  • Es ist möglich, den Inhalt der Karte innerhalb der Schleife zu ändern Verwenden von Referenzvariablen, die als auto& deklariert sind:
<code class="cpp">for (auto& kv : testing) {
  std::cout << kv.first << " had value " << kv.second << std::endl;
  kv.second = "modified";  // Modifies the map's value
}</code>
Nach dem Login kopieren
  • Wenn die Werte der Karte groß sind, kann es effizienter sein, eine bereichsbasierte Schleife mit Iteratoren anstelle von Paarobjekten zu verwenden. Dadurch entfällt jedoch ein Teil des Komforts, den bereichsbasierte for-Schleifen bieten.

Das obige ist der detaillierte Inhalt vonWie funktioniert die bereichsbasierte Iteration mit Standardkarten in C und wie unterscheidet sich die Syntax zwischen den Versionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage