为什么 memcpy 不适用于此 set<int> 数组案例?

Why memcpy NOT work on this set<int> array case?

a 是set ARRAY,我想把它复制到b。但是...

int main(){

set<int> a[10];
a[1].insert(99);
a[3].insert(99);
if(a[1]==a[3])cout<<"echo"<<endl;

set<int> b[10];
memcpy(b,a,sizeof(a));
if(b[1]==b[3])cout<<"echo"<<endl;// latch up here, what happen?

return 0;}

你知道电脑在做什么吗?

我假设您使用的 'set' class 是 std::set?是什么让您认为简单地 memcpying std::set(或它们的数组,在这种情况下)的原始字节会正常工作?这高度依赖于集合 class 的内部结构和实现,并且尝试用任何比基元或基元数组更复杂的东西来做这样的事情几乎肯定会产生意想不到的结果。当涉及 classes 时进行这种原始字节操作很少是正确的。

要正确执行此操作,您应该遍历集合并使用它们的“=”运算符来分配它们,它知道如何正确复制内容:

for(int i = 0; i < 10; ++i) {
  b[i] = a[i];
}

更好的是你可以使用std::copy:

std::copy(std::begin(a), std::end(a), std::begin(b));