en C++ 11 si tenemos un set<int> S
; podríamos decir:basado en rango para en C++ 11
for (auto i: S)
cout << i << endl;
pero podemos forzar i
ser un iterador, me refiero a escribir un código que es equivalente a:
for (auto i = S.begin(); i != S.end(); i++)
cout << (i != s.begin()) ? " " : "" << *i;
o podríamos hacer algo que podemos entender el índice de i
en el conjunto (o vector)?
y otra pregunta es ¿cómo podemos decir que no haga esto para todos los elementos en S
pero para la primera mitad de ellos o todos ellos, excepto el primero.
o cuando tenemos un vector<int> V
, y queremos imprimir sus primeros valores n
¿qué debemos hacer? Sé que podemos crear un nuevo vector, pero lleva tiempo copiar un vector a un nuevo vector.
me han preguntado una pregunta simillar aquí: http://stackoverflow.com/questions/8960403/get-first-n-elements-in-ac-multiset (por multiset lugar) – Cristy
Para imprimir los primeros n valores de un 'vector':' for (auto val: vec | sliced (0, n)) {...} '. Ver ['sliced', from Boost.Range] (http://www.boost.org/doc/libs/release/libs/range/doc/html/range/reference/adaptors/reference/sliced.html). –
El propósito del 'for' basado en rango es poder iterar más fácilmente en un rango completo. El objetivo es * no * reemplazar por completo el 'rango' no incluido en el rango. Hay cosas para las cuales necesitas un 'for' regular; el rango 'for' es solo azúcar sintáctico para un patrón de iteración común. No cubrirá todo y no se supone que lo haga. –