gpt4 book ai didi

c++ - 使用 set_union 合并两个集合时分配只读位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:54 25 4
gpt4 key购买 nike

我正在尝试将两组合并为一组,但是当我使用最简单的示例时,出现错误:assignment of read-only location '__result.std::_Rb_tree_const_iterator<_Tp>::operator*<int>()'代码是:

set<int> a;
set<int> b;
int x[4] = {0,1,2,3};int y[5] = {1,2,4,6,9};
a.insert(x,x+4);
b.insert(y,y+5);
set<int> c;
set_union(a.begin(), a.end(), b.begin(), b.end(), c.begin());

我写错了吗?想合并两个怎么办 set并使用新的 set包含元素?

此行的错误调用:set_union(a.begin(), a.end(), b.begin(), b.end(), c.begin());

最佳答案

std::set<int>::iterator不是 OutputIterator , 所以它不适合用作 std::set_union 的第五个参数.您可能是想插入 c , 所以一个合适的迭代器是 std::inserter(c,c.begin()) .

set_union(a.begin(), a.end(), b.begin(), b.end(), std::inserter(c,c.begin()));

OutputIterator 是一个可以将其指向的值分配给的迭代器,一个 std::insert_iterator<std::set<int>>通过返回一个代理对象来实现这一点,该代理对象在分配给时插入到集合中,而不是 int&

或者,如果您知道将产生多少项目(或准备过度分配),您可以使用不同容器的开始,例如 std::array<int, 7> , 或 std::vector<int>其大小足以包含并集产生的 7 个元素。

std::vector<int> d(a.size() + b.size(), 0); // preallocate enough
std::vector<int>::iterator end = std::set_union(a.begin(), a.end(), b.begin(), b.end(), d.begin());
d.erase(end, d.end()); // clean up any excess elements not from `a` or `b`

关于c++ - 使用 set_union 合并两个集合时分配只读位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com