【问题标题】:"vector iterator not incrementable" run-time error with set_intersection带有 set_intersection 的“向量迭代器不可递增”运行时错误
【发布时间】:2010-08-13 14:44:29
【问题描述】:

为什么这段代码会导致运行时错误“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);

【问题讨论】:

    标签: c++ stl stl-algorithm


    【解决方案1】:

    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,以便向量可以包含所有结果。

    【讨论】:

    • 有趣的是,这不适合我。我一直在使用back_inserter,但我不知道为什么这不起作用。
    • 在不知道错误的情况下,您是否错过了&lt;iterator&gt; 包含?
    • 你会如何修改它以使用集合而不是向量?
    • @Mark:不,也许我会发一个新帖子。
    • 啊,我明白了问题所在。 OP 试图将set_intersection 的结果分配给vector&lt;string&gt;::iterator,而不是back_insert_iterator&lt;vector&lt;string&gt; &gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多