为什么memcpy不适用于这个set <int>数组的情况?

时间:2018-04-09 13:25:35

标签: memcpy

a设置&lt; INT&GT; 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;}

你知道什么是电脑吗?

1 个答案:

答案 0 :(得分:0)

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

要正确执行此操作,您应该迭代这些集并使用它们的'='运算符来分配它们,它们知道如何正确复制内容:

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

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

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