L'exemple courant pour les boucles for () basées sur la plage C ++ 11 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;
}
Dans ce cas, xyz
est un int
. Mais que se passe-t-il lorsque 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 traversé est quelque chose de simple, il semble que les boucles for () basées sur une plage nous donneront chaque élément, pas un itérateur. Ce qui est bien ... s'il s'agissait d'un itérateur, la première chose que nous aurions toujours à faire est de le déférencer de toute façon.
Mais je ne sais pas à quoi m'attendre quand il s'agit de choses comme les cartes et les multimaps.
(Je suis toujours sur g ++ 4.4, alors que les boucles basées sur la plage sont dans g ++ 4.6+, donc je n'ai pas encore eu l'occasion de l'essayer.)
std::begin
et lesstd::end
fonctions ou fonctions membres sous le même nom.