我正在尝试用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):错误C2678:'='binary:没有运算符定义,它采用类型为'const std :: basic_string&lt的左手操作数; _Elem,_Traits,_AX&GT;” (或者没有可接受的转换)
如果我使用std::vector
而不是std::set
,则编译成功。
上可接受的)
答案 0 :(得分:6)
尝试
set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), inserter(out, out.begin()) );
这是因为set_intersection想要写入输出迭代器,这会导致输出容器的大小增加。但是,仅仅使用迭代器就无法做到这一点(它可以用于覆盖现有元素但不会增大)
编辑:修正错字。使用插入器添加到集合中。 back_inserter仅适用于矢量等。
编辑2:修正了另一个错字。 STL inserter
需要第二个参数,它是可能的插入位置的提示迭代器。谢谢chepseskaf。