El ejemplo común para C++ 11 gama de base para() bucles es siempre algo sencillo como este:Cómo usar el bucle for() basado en rangos con std :: map?
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 así 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 recipiente se está atravesando es algo simple, parece que para() basada en bucles de gama nos dará cada elemento, no un iterador. Lo cual es bueno ... si fuera un iterador, lo primero que siempre tendríamos que hacer es eliminarlo de todos modos.
Pero estoy confundido en cuanto a lo que puede esperar cuando se trata de cosas como mapas y Multimapas.
(Todavía estoy en g ++ 4.4, mientras que los bucles basados en la esfera están en g ++ 4.6+, por lo que no han tenido la oportunidad de probarlo todavía.)
El rango para la declaración hace una danza impía con las funciones estándar de la biblioteca 'std :: begin' y' std :: end' o las funciones de miembros bajo el mismo nombre. –
xyz es un horrible nombre de la variable en mi humilde opinión. Parece x multiplicado por y multiplicado por z o algo. O tres variables en uno, x, y y z que tampoco tienen sentido. ¿Por qué no solo usas x? – Will
@will En un ejemplo de 3 líneas, ¿te encuentras atrapado en el nombre de la variable falsa? –