2009-01-19 17 views

Respuesta

81

¿Por qué iterar y no utilizar el algoritmo de copia estándar?

std::copy(vector.begin(), vector.end(), std::back_inserter(list)); 
+0

Debería ser std :: copy en lugar de stl :: copy, pero de lo contrario este es el método preferido cuando se utilizan iteradores para copiar. – workmad3

0

Usted puede tratar de usar las cosas más difíciles de la cabecera <algorithm>, por ejemplo for_each o copy ... sino que equivaldría a lo mismo, en mi opinión.

+0

for_each equivaldrá a lo mismo. La copia puede sobrecargarse para proporcionar una mecánica de copia mucho más eficiente dependiendo de los iteradores proporcionados, y generalmente es el mecanismo preferido. – workmad3

56

Si usted está haciendo una nueva lista, usted puede tomar ventaja de un constructor que toma comenzar y terminar iteradores: Respuesta

std::list<SomeType> myList(v.begin(), v.end()); 

de Kasprzol es perfecto si usted tiene una lista existente desea anexar a.

1

Me gusta esta sugerencia para construir una nueva lista.

std::list<SomeType> myList(v.begin(), v.end()); 

Pero cuando se agrega a una lista existente, lo siguiente puede ser óptimo para pequeños conjuntos de datos. Por "óptimo", quiero decir que es más fácil recordar cómo hacerlo y más fácil de entender. (Estas son afirmaciones subjetivas, estoy seguro de que depende de la forma en que su cerebro está conectado.)

for (unsigned i=0; i<v.size(); i++) myList.push_back(v[i]); 

Utilización de iteradores en vectores pueden ser demasiado pedante en muchos casos. La indexación simple generalmente funciona bien.

Otro hilo trata iteradores frente a índices (here). En ese hilo, la respuesta tomada básicamente prefiere iteradores porque son más genéricos. Pero si los vectores son el tipo de contenedor más comúnmente utilizado, creo que es razonable especializar este tipo de algoritmo simple.

6
list.assign(vector.begin(), vector.end()); 
+0

Esto es útil, pero probablemente debería agregar algo que no sea código a esta respuesta para evitar una posible bandera VLQ. –

Cuestiones relacionadas