166 votes

C++, copie la valeur vector

J’ai besoin de copier std::set std::vector

Où est le problème ?

235voto

James McNellis Points 193607

Vous devez utiliser un back_inserter:

std::copy(input.begin(), input.end(), std::back_inserter(output));

std::copy n'est pas d'ajouter des éléments dans le conteneur dans lequel vous insérez: il ne peut pas; il ne dispose que d'un itérateur dans le récipient. De ce fait, si vous passez une sortie itérateur directement à l' std::copy, vous devez vous assurer qu'il pointe vers une plage qui est au moins assez grande pour contenir la gamme d'entrée.

std::back_inserter crée une sortie itérateur qui appelle push_back sur un conteneur pour chaque élément, de sorte que chaque élément est inséré dans le conteneur. Alternativement, vous pourriez avoir créé un nombre suffisant d'éléments dans l' std::vector pour tenir la gamme copié:

std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());

Ou, vous pouvez utiliser l' std::vector de la gamme du constructeur:

std::vector<double> output(input.begin(), input.end()); 

144voto

Jacob Points 1766

Il suffit d’utiliser le constructeur pour le vecteur qui prend les itérateurs :

Suppose que vous voulez juste le contenu de s à v, et il n’y a rien dans v avant de les copier les données à lui.

52voto

TeddyC Points 43

Voici une autre alternative à l’aide de vector::assign :

27voto

Marlon Points 11528

Vous n’avez pas réservé suffisamment d’espace dans votre objet vectoriel d’organiser le contenu de votre jeu.

1voto

Bradley Swain Points 597

``ne peut servir à insérer dans un récipient vide. Pour ce faire, vous devez utiliser un insert_iterator comme suit :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X