对std::set
的所有元素进行异或运算时出错。
下面是部分代码。对std::transform
不太了解。帮助请:)
#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
set<ll> e1 ;//suppose i had inserted few elements in it!
ll x2;
cin>>x2;
//now i want to xor all elements of set with x2.
std::transform(std::begin(e1), std::end(e1), std::begin(e1), [=](ll x){return x2^x;});
return 0;
}
错误消息:
错误分配只读位置 '__result.std :: _ Rb_tree_const_iterator <_Tp> :: operator *()'
答案 0 :(得分:6)
不能。 std::set
不允许对其元素进行就地修改,因此永远无法写入其迭代器。因此,您不能将std::set
用作std::transform
的目标。
您必须从旧元素中创建一个新集合,并随您的需要进行转换。 (例如,通过使用std::inserter
作为std::transform
的目标。)
确定要使用std::vector
吗?