2010-08-13 35 views
3

Pourquoi ce code entraîne-t-il une erreur d'exécution «vecteur itérateur non incrémentable»?Erreur d'exécution «vecteur itératif non incrémentable» avec set_intersection

vector<string> s1, s2; 

s1.push_back("joe"); 
s1.push_back("steve"); 
s1.push_back("jill"); 
s1.push_back("svetlana"); 

s2.push_back("bob"); 
s2.push_back("james"); 
s2.push_back("jill"); 
s2.push_back("barbara"); 
s2.push_back("steve"); 

sort(s1.begin(), s1.end()); 
sort(s2.begin(), s2.end()); 

vector<string> result; 
vector<string>::iterator it_end, it_begin; 
it_end = set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), result.begin()); 
cout << int (it_end - result.begin()) << endl; 
for_each(result.begin(), result.end(), print); 

Merci d'avance pour votre aide!

Répondre

9

result.begin() d'un vecteur vide n'est pas un itérateur de sortie valide. Vous avez besoin d'un back_inserter(result) à la place.

#include <iterator> 
... 
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(result)); 
cout << result.size() << endl; 

Vous pouvez également redimensionner result à au moins 4, de sorte que le vecteur peut contenir tous les résultats.

+0

Fait intéressant, cela ne compile pas pour moi. J'utilise 'back_inserter' tout le temps, et je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. –

+1

Merci Kenny, c'est ce qu'il a fait. – shaz

+0

Sans connaître l'erreur, vous manquez l'include ''? –