5

我正在尝试使用 VC10 编译 VC6 项目...我使用 set_intersection 获得错误 C2678:我写了一些示例来理解。任何人都可以解释如何编译这个片段吗?

#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <string>

int main( )
{
    using namespace std;

    typedef set<string> MyType;

    MyType in1, in2, out;
    MyType::iterator out_iter(out.begin()); 

    set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
}

输出 :

c:\program files\microsoft visual\studio 10.0\vc\include\algorithm(4494): error C2678: '=' binary: 没有定义运算符,它采用'const std::basic_string<_Elem, _Traits,_Ax>'(或没有可接受的转换)

如果我使用 astd::vector而不是std::set编译成功。可接受)

4

1 回答 1

7

尝试 set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), inserter(out, out.begin()) );

这是因为 set_intersection 想要写入输出迭代器,这会导致输出容器的大小增加。然而,这不能只用一个迭代器来完成(它可以用来覆盖现有元素但不会增加大小)

编辑:修正错字。使用插入器添加到集合中。back_inserter 仅适用于向量等。

编辑 2:修复了另一个错字。STLinserter需要第二个参数,它是可能插入位置的提示迭代器。谢谢切普赛斯卡夫。

于 2010-06-30T15:29:06.860 回答