web-dev-qa-db-fra.com

La meilleure façon de copier un vecteur dans une liste en STL?

Itérer à travers le vecteur à l'aide d'un itérateur et copier dans une liste la méthode de copie la plus optimale. Des recommandations?

41
kal

Pourquoi voudriez-vous répéter et ne pas utiliser l'algorithme de copie standard?

std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );
86
Kasprzol

Si vous créez une nouvelle liste, vous pouvez profiter d'un constructeur qui prend les itérateurs de début et de fin:

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

La réponse de Kasprzol est parfaite si vous avez une liste existante à ajouter.

61
Fred Larson
list.assign(vector.begin(), vector.end());
6
Dennis

J'aime cette suggestion pour construire une nouvelle liste.

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

Mais lors de l'ajout à une liste existante, les éléments suivants peuvent être optimaux pour les petits ensembles de données. Par "optimal", je veux dire qu'il est plus facile de se rappeler comment faire et plus facile à comprendre. (Ce sont des déclarations subjectives, je suis sûr que cela dépend de la façon dont votre cerveau est câblé.)

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

L'utilisation d'itérateurs sur des vecteurs peut être trop pédante dans de nombreux cas. L'indexation simple fonctionne généralement bien.

Un autre thread traite des itérateurs par rapport aux indices ( ici ). Dans ce fil, la réponse prise a essentiellement préféré les itérateurs car ils sont plus génériques. Mais si les vecteurs sont le type de conteneur le plus couramment utilisé, je pense qu'il est raisonnable de spécialiser ce type d'algorithme simple.

1
nobar

Vous pouvez essayer d'utiliser des choses plus délicates à partir du <algorithm> en-tête, par exemple for_each ou copy ... mais ce serait la même chose, à mon avis.

0
ChrisW