为什么这段代码会导致运行时错误“vector iterator not incrementable”?
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);
最佳答案
空 vector 的
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,以便 vector 可以包含所有结果。
关于c++ - "vector iterator not incrementable"set_intersection 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3477955/