416 Stimmen

Wie verwendet man eine bereichsbasierte for()-Schleife mit std::map?

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).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X