Das übliche Beispiel für C++11 bereichsbasierte for()-Schleifen ist immer etwas Einfaches wie dieses:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
In diesem Fall xyz
ist ein int
. Aber was passiert, wenn wir 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 Container, der durchlaufen wird, etwas Einfaches ist, sieht es so aus, als ob bereichsbasierte for()-Schleifen uns jedes Element und nicht einen Iterator liefern. Was schön ist... wenn es Iterator war, ist das erste, was wir immer tun müssen, um es sowieso zu dereferenzieren.
Aber ich bin verwirrt, wenn es um Dinge wie Karten und Multimaps geht.
(Ich arbeite immer noch mit g++ 4.4, während bereichsbasierte Schleifen in g++ 4.6+ enthalten sind, ich hatte also noch keine Gelegenheit, es auszuprobieren).