Comment utiliser la gamme à base de boucle for() avec std::map?

L'exemple le plus connu de C++11 gamme à base de() les boucles est toujours quelque chose de simple comme ceci:

std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
     std::cout << xyz << std::endl;
}

Auquel cas xyz est un int. Mais, ce qui arrive quand nous avons quelque chose comme une carte? Quel est le type de la variable dans cet exemple:

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?
}

Lorsque le conteneur étant traversée est quelque chose de simple, ça ressemble à de la gamme, en fonction de() boucle de nous donner chaque élément, et pas un itérateur. Ce qui est beau...si c'était itérateur, la première chose que nous avons toujours avez à faire est de déréférencement d'elle de toute façon.

Mais je suis confus quant à ce à quoi s'attendre quand il s'agit de choses comme des cartes et des multimaps.

(Je suis toujours sur g++ 4.4, tandis que la gamme de base, les boucles sont en g++ 4.6+, je n'ai pas eu la chance de l'essayer encore.)

  • La gamme de déclaration n'est impie de la danse avec la bibliothèque standard std::begin et std::end fonctions ou des fonctions de membre sous le même nom.
  • Sur un 3-exemple de ligne, vous vous êtes pris sur le faux nom de variable?
InformationsquelleAutor Stéphane | 2011-08-06