首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用C++ STL set_symmetric_difference?

正确使用C++ STL set_symmetric_difference?
EN

Stack Overflow用户
提问于 2020-12-05 04:28:54
回答 1查看 68关注 0票数 1

在C++中,我想使用algorithm中的set_symmetric_difference,获取两个STL集合,并生成一个包含这两个集合之外的所有元素的集合。

我得到一个编译错误"'_UDest':你不能赋值给一个常量变量“,所以我误解了如何使用set_symmetric_difference

代码如下(C++编译器是Visual Studio2019):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-12-05 04:45:23

您正在将一个迭代器作为“输出迭代器”传递给空集diff。迭代器不是这样工作的。diff.begin()指的是现有元素(其中没有任何元素)。

但是,如果没有这个因素,您仍然会尝试写入不存在的元素。

相反,您可以使用特殊的 魔术迭代器将插入内容包装到集合中,就像在the set_symmetric_difference usage example on cppreference中一样(尽管它使用排序的std::vector "sets“而不是std::set,因此它可以使用std::back_inserter)。

下面是一个例子:

代码语言:javascript
复制
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>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65150286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档