auto es una palabra reservada de C++. Aparece a partir de C++11, por lo que si estás compilando con un compilador antiguo o que no tenga activa la opción C++11 (por ejemplo para MinGw hay que compilar con uno de estos dos flags, depende de la versión: -std=c++0x -std=c++11 )
lo que hace auto es dejar al compilador elegir el tipo de dato:
auto valor1 = 1; // valor sera de tipo int
auto valor2 = 14.5; // valor sera de tipo double
En el caso que ocupa el ejemplo, las siguientes dos líneas son equivalentes:
auto it = elementos.begin( );
std::vector< std::pair< std::string, int > >::iterator it = elementos.begin( );
Aquí se ve claro el motivo por el que uso "auto" en vez de su declaración formal, por claridad.
La otra ventaja que tiene usar "auto" es que si cambio la definición del contenedor no tengo que actualizar el uso del iterador, ya que "auto" hace ese trabajo por mí
. Eso sí, esta palabra es mejor usarla con cuidado porque puede complicar la lectura del código y dar problemas si se usa de forma indiscriminada.
Ya que estamos hablando de esto, it es un iterador. Los iteradores se utilizan para recorrer contenedores en general. Es un elemento muy interesante e importante y saberlo usar aporta bastante potencia a la gestión de contenedores.
En este caso, el bucle for lo que está haciendo es crear un iterador que apunta al primer elemento del contenedor... y recorrerá todos los elementos del vector (++it) hasta que llegue al final.