C++, l'ensemble de la copie de vecteur

J'ai besoin de copier std::set à std::vector:

std::set <double> input;
input.insert(5);
input.insert(6);

std::vector <double> output;
std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable

Où est le problème?

  • il est également assign() fonction: output.assign(input.begin(), input.end());
  • et insert().
  • votre vecteur est vide. Il existe une multitude de moyens de recours que si, comme les gens sont de pointage ci-dessous.
  • assign() veut reserve() la quantité nécessaire de stockage à l'avance. Il va utiliser l'entrée des itérateurs pour déterminer la quantité est nécessaire, à moins que les itérateurs sont strictement InputIterator, auquel cas il va sauter la réservation et le résultat dans les réaffectations sur chaque push_back(). Sur l'extrémité opposée du spectre, BiderectionalIterators permettrait à juste soustraire bout commencer. std::set de itérateurs, cependant, ne sont pas (ils sont ForwardIterator), et c'est malheureux: dans ce cas, affecter() va juste marcher l'ensemble afin de déterminer sa taille -- mauvaises performances sur les grands ensembles.