【问题标题】:Can someone please explain what does copy function do? [closed]有人可以解释一下复制功能的作用吗? [关闭]
【发布时间】:2019-02-08 04:37:03
【问题描述】:
int * result = new int[size1 + size2];
copy(arr1, arr1 + size1, result);
copy(arr2, arr2 + size2, result + size1);

取自:https://stackoverflow.com/a/12791344/6268615

有人可以解释更多关于参数的细节吗?我已经浏览了 c++ 的文档,但仍然不明白。

此代码是通过使用复制功能将两个数组合并为一个动态数组。

【问题讨论】:

  • “这段代码使用复制功能将两个数组合并为一个动态数组。”听起来你已经明白了。你有什么问题?
  • 您好,感谢您的回复,我不了解函数中的参数。
  • 我建议你把涉及到的数组画在纸上,尤其是result。然后将箭头用于您拥有的指针,尤其是result + size1
  • 您也可以对copy(arr2, arr2 + size2, copy(arr1, arr1 + size1, result)); 执行相同的操作,因为copy 返回刚刚复制的元素之后的位置。这有帮助吗?可能不会。
  • 你应该阅读关于动态分配内存的内容,这里借助 new 运算符,分配的内存等于 size1 + size2 的大小,并且复制函数需要 3 个参数第一个基地址,第二个位置地址在数组中直到我们必须复制它,第三个参数是它应该被复制到哪里意味着结果数组中的位置地址。

标签: c++


【解决方案1】:

基本上这就是copy这个参数的意思:

copy( StartPositionSource, EndPositionSource, StartPositionTarget )

你从源复制到目标。

鉴于你的例子:

copy(arr1, arr1 + size1, result);
copy(arr2, arr2 + size2, result + size1);

假设 arr1 有 2 个元素,arr2 有 3 个元素,你会得到:

result = [arr1[0], arr1[1], arr2[0], arr2[1], arr2[2]]

【讨论】:

    【解决方案2】:

    result 指向的动态数组足够大,可以一个接一个地包含arr1arr2。第一个copy

    copy(arr1, arr1 + size1, result);
    

    result指向的动态数组中的位置开始复制[arr1, arr1 + size1)范围内的每个元素,即动态数组的第一个元素。

    arr1 复制到[result, result + size1) 后,您希望从result + size1 开始复制arr2。这是通过以下方式实现的:

    copy(arr2, arr2 + size2, result + size1);
    

    【讨论】:

    • result 不是数组。
    • Ops,你没看错,数组是动态分配的。已更正:) 谢谢!
    • "数组已被动态分配。"没有像“动态分配的数组”这样的东西。
    • 如何定义堆分配的匿名数组(如new int[size1 + size2])?
    • 我并不是说result 是一个数组。您的第一条评论仍然适用,result 是一个指针,它保留堆分配的、大小为 size1 + size2 的匿名数组的第一个元素的内存地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2020-04-20
    • 2012-09-22
    相关资源
    最近更新 更多