“向量迭代器不可递增” 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);
Why does this code result in a run-time error "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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
空向量的
result.begin()
不是有效的输出迭代器。您需要一个back_inserter(result)
。或者,将
result
大小调整为至少 4,以便向量可以包含所有结果。result.begin()
of an empty vector is not a valid output iterator. You need aback_inserter(result)
instead.Alternatively, resize
result
to at least 4, so that the vector can contain all results.