namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:beispiel:range_based_for

range-based for

Write clearly – don't sacrifice clarity for "efficiency".
— Kernighan, Plauger [The Elements of Programming Style]

Die in 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

std::vector<int> v = { 1, 2, 3, 4 }; 
 
for (auto e : v) std::cout << e << ' ';

und bewirkt dasselbe wie

for (std::vector<int>::iterator iter = v.begin(), last = v.end(); iter != last; ++iter)
{
  int e = *iter;
  std::cout << e << ' ';
}

Die "range for"-Anweisung ist auch für gewöhnliche Felder nutzbar.

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

Den Typ der Containerelemente kann der Compiler auch automatisch erkennen. Durch Referenzen ist der Inhalt von nichtkonstanten Containern änderbar:

for (auto element : container)        // Wertkopie ... 
for (auto& element : container)       // Referenzzugriff ... 
for (const auto& element : container) // schreibgeschützt ... 

In generischen Funktionen empfiehlt sich

for (auto&& element : container) // ... 

Dies funktioniert für konstante und nicht konstante Elemente sowie Proxy-Objekte.

kennen/beispiel/range_based_for.txt · Zuletzt geändert: 2018-10-20 13:02 von rrichter