Das gängige Beispiel für bereichsbasierte for () - Schleifen in C ++ 11 ist immer so einfach:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
In welchem Fall xyz
ist ein int
. Aber was passiert, wenn wir so etwas wie eine Karte haben? Was ist der Typ der Variablen in diesem Beispiel:
std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
std::cout << abc << std::endl; // ? should this give a foo? a bar?
std::cout << abc->first << std::endl; // ? or is abc an iterator?
}
Wenn der zu durchlaufende Container etwas Einfaches ist, sieht es so aus, als würden bereichsbasierte for () -Schleifen uns jedes Element geben, keinen Iterator. Was schön ist ... wenn es ein Iterator wäre, müssten wir es immer als erstes dereferenzieren.
Aber ich bin verwirrt, was mich erwartet, wenn es um Dinge wie Karten und Multimaps geht.
(Ich bin immer noch auf g ++ 4.4, während bereichsbasierte Schleifen in g ++ 4.6+ sind, also hatte ich noch keine Gelegenheit, es zu versuchen.)
std::begin
undstd::end
Funktionen oder Mitgliedsfunktionen unter demselben Namen durch.