C++,copy()使用陷阱

读万卷书,行万里路——木子成

问题:

使用copy拷贝非内置类型(类类型)数据,并且拷贝变量和被拷贝变量相同时(类类型数组向后移动N单位),出现重复拷贝,情况:

 


前言:

这又是一个感觉啥也没学到就过去的一天.......时间如白驹过隙~~~~

 


闲话少说:

让我们来看看这段代码:

代码目的:这里我们将str内存中的每个字符向后移动一个单位,把‘a’放在str[0]的位置

对照输出,按照在下的理解,这里关于copy()的使用完全没问题


那我们再来看看一段代码:

代码目的:这里我们将pair内存中的每个对象向后移动一个单位,把Pair(-1)放在pair[0]的位置


我们的预计,输出应该是这样的:

但是,该代码的输出是这样的:

 


对于内置类型(int, char~)本人亲测均无问题


为什么会出现这样的情况,我也不知道。。。。(待有缘人正确解答)

 


让我们尝试着分析:

将pair[0]复制给pair[1],再将pair[1]复制给pair[2],再将pair[2]复制给pair[3]~~~~~
如果按照这样的方式copy,那不重复才怪咯


但是为什么内置类型不会出现这样的情况,那就不知道了,这可能要等以后仔细的去看copy()每个重载函数源码才知道了(希望有缘人给出解答)

 


解决方案:

1.使用copy_backword(),从后面往前面复制,巧妙的避免了这个问题

 

2.创建一个中间变量数组,保存需要复制的数据段,然后将中间变量数组复制到pair中

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值