首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么memcpy不工作在这个set<int>数组的情况下?

为什么memcpy不工作在这个set<int>数组的情况下?
EN

Stack Overflow用户
提问于 2018-04-09 13:25:34
回答 1查看 21关注 0票数 0

A是set< int>数组,我想把它复制到b.但是.

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

你知道电脑在干什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-09 14:33:49

我假设您使用的“set”类是std::set?是什么使您认为简化对std::set (在本例中为它们的数组)的原始字节的简单记忆将正常工作?这在很大程度上取决于set类的内部结构和实现,并且尝试使用比原语或基元数组更复杂的方法来做这样的事情,几乎可以保证会产生意想不到的结果。在涉及类时执行这种原始字节操作很少是正确的。

要正确地执行此操作,您应该对集合进行迭代,并使用它们的'=‘操作符分配它们,后者知道如何正确地复制内容:

代码语言:javascript
复制
for(int i = 0; i < 10; ++i) {
  b[i] = a[i];
}

更好的是,您可以使用std::copy:

代码语言:javascript
复制
std::copy(std::begin(a), std::end(a), std::begin(b));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49734127

复制
相关文章

相似问题

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