2009-02-24 8 views
0

Je suis en train de trouver la différence de jeu de deux vecteurs, donc je fais quelque chose comme ceci:erreur Assertion dans std: vecteur utilisé dans std :: set_difference

std::vector<sha1_hash> first_vec, second_vec, difference_vec; 

// populate first_vec and second_vec ... 

std::sort(first_vec.begin(),first_vec.end()); 
std::sort(second_vec.begin(),second_vec.end()); 

std::set_difference(first_vec.begin(),first_vec.end(), 
      second_vec.begin(),second_vec.end(), 
      difference_vec.begin()); 

Quand je lance ceci dans le débogage, je reçois l'échec d'assertion d'exécution suivante (en « vecteur »):

_SCL_SECURE_VALIDATE_RANGE(_Myptr < ((_Myvec *)(this->_Getmycont()))->_Mylast); 

J'utilise VS 2008. Toutes les idées sur ce qui peut déclencher cela?

Répondre

7

Comme la plupart des algorithmes C++, set_difference ne crée pas de nouvelles entrées dans le vecteur de sortie où il n'existait pas auparavant. Vous devez créer un espace dans la sortie pour conserver les résultats.

Edit: Ou utiliser un un insert iterator (suivant non testé):

back_insert_iterator< std::vector<sha1_hash> > bi(difference_vec); 

std::set_difference(first_vec.begin(),first_vec.end(), 
      second_vec.begin(),second_vec.end(), 
      bi); 
+1

utilisation Moins bavard du back_insert_iterator: std :: set_difference (first_vec.begin(), first_vec.end(), second_vec. begin(), second_vec.end(), std :: back_inserter (différence_vec)); –