El ejemplo común para los bucles para () basados en el rango de C ++ 11 es siempre algo simple como esto:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
En cuyo caso xyz
es un int
. Pero, ¿qué sucede cuando tenemos algo como un mapa? ¿Cuál es el tipo de la variable en este ejemplo?
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?
}
Cuando el contenedor que se atraviesa es algo simple, parece que los bucles basados en rango para () nos darán cada elemento, no un iterador. Lo que es bueno ... si fuera iterador, lo primero que siempre tendríamos que hacer es desreferenciarlo de todos modos.
Pero estoy confundido sobre qué esperar cuando se trata de cosas como mapas y mapas múltiples.
(Todavía estoy en g ++ 4.4, mientras que los bucles basados en rango están en g ++ 4.6+, por lo que aún no he tenido la oportunidad de probarlo).
std::begin
y lasstd::end
funciones o funciones miembro bajo el mismo nombre.