namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:beispiel:range_based_for
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:beispiel:range_based_for [2020-07-27 10:34] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== range-based for ======
 +> // Write clearly -- don't sacrifice clarity for "efficiency". //
 +>>  --- Kernighan, Plauger [The Elements of Programming Style]
 +
 +
 +Die in [[..:begriffe#C++11]] eingeführte Anweisung "for each object in range", auch "range-based for loop" genannt, sieht fast wie Java (ab Version 5, "Tiger") aus 
 +<code cpp>
 +std::vector<int> v = { 1, 2, 3, 4 }; 
 +
 +for (auto e : v) std::cout << e << ' ';
 +
 +</code>
 +und bewirkt dasselbe wie 
 +<code cpp>
 +for (std::vector<int>::iterator iter = v.begin(), last = v.end(); iter != last; ++iter)
 +{
 +  int e = *iter;
 +  std::cout << e << ' ';
 +}
 +</code>
 +
 +Die "range for"-Anweisung ist auch für gewöhnliche Felder nutzbar.
 +<code cpp>
 +double arr[] = { 1.2, 2.3, 3.4 };
 +  
 +for (double& e : arr) e *= 2;
 +for (double  e : arr) std::cout << e << ' '; // 2.4 4.6 6.8
 +</code>
 +Den Typ der Containerelemente kann der Compiler auch automatisch erkennen. Durch Referenzen ist der Inhalt von nichtkonstanten Containern änderbar:
 +<code cpp>
 +for (auto element : container)        // Wertkopie ... 
 +for (auto& element : container)       // Referenzzugriff ... 
 +for (auto const& element : container) // schreibgeschützt ... 
 +</code>
 +In generischen Funktionen empfiehlt sich
 +<code cpp>
 +for (auto&& element : container) // ... 
 +</code>
 +Dies funktioniert für konstante und nicht konstante Elemente sowie Proxy-Objekte. 
  
kennen/beispiel/range_based_for.txt · Zuletzt geändert: 2020-07-27 10:34 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki