在C++中,我想使用algorithm
中的set_symmetric_difference
,获取两个STL集合,并生成一个包含这两个集合之外的所有元素的集合。
我得到一个编译错误"'_UDest':你不能赋值给一个常量变量“,所以我误解了如何使用set_symmetric_difference
。
代码如下(C++编译器是Visual Studio2019):
set<unsigned short> a, b, diff;
// code to add entries to a and b
set_symmetric_difference(a.begin(), a.end(), b.begin(), b.end(), diff.begin()); // error C3892: '_UDest': you cannot assign to a variable that is const
发布于 2020-12-04 20:45:23
您正在将一个迭代器作为“输出迭代器”传递给空集diff
。迭代器不是这样工作的。diff.begin()
指的是现有元素(其中没有任何元素)。
但是,如果没有这个因素,您仍然会尝试写入不存在的元素。
相反,您可以使用特殊的 魔术迭代器将插入内容包装到集合中,就像在the set_symmetric_difference
usage example on cppreference中一样(尽管它使用排序的std::vector
"sets“而不是std::set
,因此它可以使用std::back_inserter
)。
下面是一个例子:
std::set<unsigned short> a, b, diff;
// (code to add entries to a and b)
std::set_symmetric_difference(
a.begin(), a.end(),
b.begin(), b.end(),
std::inserter(diff, diff.begin()) // <---
);
为此,您需要使用#include <iterator>
。
https://stackoverflow.com/questions/65150286
复制相似问题