Ошибка «векторный итератор не увеличивается» во время выполнения с set_intersection - PullRequest
3 голосов
/ 13 августа 2010

Почему этот код приводит к ошибке времени выполнения "векторный итератор не может быть увеличен"?

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);

1 Ответ

9 голосов
/ 13 августа 2010

result.begin() пустого вектора не является допустимым выходным итератором. Вам нужно back_inserter(result).

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

Либо измените размер result как минимум до 4, чтобы вектор мог содержать все результаты.

...