1.
Desde C ++ 11, hay una nueva forma de bucle usando auto
.
Digamos, por ejemplo, que tiene una estructura de datos compleja que usa STL como esta:
map <int, vector <pair >> myMap;
Significa que tiene un map
en el que la clave principal es un entero y el valor correspondiente de una clave es un vector
que nuevamente contiene un pair
de enteros.
- ¿Cuáles son algunos buenos consejos sobre la vida, el trabajo o algo que compartir con los jóvenes?
- ¿A qué lugar público irías para obtener la conexión a internet gratuita más rápida?
- ¿Cuáles son algunos buenos consejos y trucos para ser productivos e impactantes en el trabajo?
- ¿Cuáles son algunos consejos para evitar el túnel carpiano?
- ¿Cómo debo gastar mi salario sabiamente?
Ahora, para iterar en algún lugar dentro del código, puede usar el iterator
C ++ para declarar iterador para este mapa y decir, por ejemplo, que desea apuntar al elemento inicial:
map <int, vector <pair >> iterator it = myMap.begin ();
En lugar de escribir esto, ahora podemos escribirlo fácilmente desde C ++ 11 en adelante:
auto it = myMap.begin ();
Después de descubrir el auto
, ¡ya no uso la forma anterior! 🙂
2.
Para asignar elementos a un pair
, en realidad no necesitamos usar la función make_pair()
siempre. Esta instalación probablemente esté disponible en C ++ 11.
Previamente:
pair myPair = make_pair (1,2);
Ahora:
pair myPair = {1,2}; // No hay necesidad de make_pair ()
Curiosamente, la asignación de valores a muchos contenedores se puede hacer con un método similar en C ++ 11.
3.
C ++ 11 tiene una función llamada to_string()
. Me alegré mucho de ver esta función cuando la encontré por primera vez.
int a = 12; string x = to_string (a);
Esta función funciona para casi todo. ¡Adiós a la conversión manual de enteros, dobles, etc. a cadenas! 😀
4.
El rango basado for
bucle es otra adición interesante a C ++ 11. Es como Python o Java. Un ejemplo de rango basado for
bucle con auto
:
Previamente:
map myMap; para (map :: iterator it = myMap.begin (); it! = myMap.end (); it ++) { // decir para imprimir cout < first) << ":" < second) << endl; }
Ahora:
map myMap; para (auto & it: myMap) { cout << it.first << ":" << it.second << endl; }
Muy prudente!
5.
Functor!
// Ordenar un conjunto de pares por segundo valor por functor estructura comp { operador bool () (const pii & a, const pii & b) { devuelve a.second <b.second; } }; conjunto s;
Ahora, cada vez que inserte un par en este conjunto, ordenará todo basándose principalmente en el segundo elemento. Por supuesto, puedes cambiar el primer y el segundo elemento y evitar el functor
. En caso de que haya casos en los que necesite realizar una clasificación compleja, el functor
puede ser de gran ayuda.
Usted puede ver esto.