Estoy tratando de hacer un ciclo doble sobre una lista std :: para operar en cada par de elementos. Sin embargo, estoy teniendo algunos problemas para inicializar el segundo iterador. El código que me gustaría escribir es:Cómo construir un iterador std :: list en el ciclo con el incremento
for(std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
for(std::list<int>::iterator j = i+1; j != l.end(); ++j) {
...
}
}
que no funciona porque la lista no son iteradores de acceso aleatorio, por lo que no se puede hacer +1. Pero estoy teniendo problemas para encontrar una buena alternativa; el compilador no parece estar muy contento con std::list<int>::iterator j(i)++;
que tenía alguna esperanza. Lograr lo que quiero parece que voy a tener que tener un incremento adicional incómodo que no se ajuste bien a la estructura del ciclo for.
Existen alternativas obvias (¡usar un vector, por ejemplo!) Pero me parece que debería haber alguna manera razonablemente clara de hacer esto que no estoy viendo en este momento.
Gracias de antemano por cualquier ayuda :)
'advance' no tiene valor de retorno, modifica el primer argumento. (Lo que personalmente no me gusta). Dicho esto, es fácil escribir una función 'advance_copy'. – GManNickG
@GMan: reparado. Ty! – dirkgently
No hay problema. Decidí ir con mi idea como una respuesta alternativa. – GManNickG