【问题标题】:How to copy an entire array (not element by element)如何复制整个数组(不是逐个元素)
【发布时间】:2016-09-17 07:14:35
【问题描述】:

请参考下面的代码(和 cmets)。
我正在尝试使数组 = newArray。
在 C++ 中执行此操作的正确语法是什么?

我正在尝试将 array 指向与 中的 newArray 相同的内存位置>memoryCopy(),
从而将 newArray 复制到 array 中,而不必像在 deepCopy 中那样逐个元素地进行()

#include <iostream>
using namespace std;

void deepCopy(int array[], int size);
void memoryCopy(int *array, int size);
void show(int array[], int size);

int main ()
{
    int array[] = {1,1,1};
    show(array,3); // shows array [] = {1,1,1}
    deepCopy(array, 3);
    show(array,3); // shows array [] = {0,0,0}
    memoryCopy(array, 3);
    show(array,3); // shows array [] = {5,0,0}
    // I need the above to show {5, 5, 5} ^ ^
    // How can I do this in memoryCopy() using pointers?
}

void memoryCopy(int *array, int size)
{
     int newArray[] = {5,5,5};
     // I need to make array = newArray ...
     // ... but without copying it over element by element
     memcpy(array,newArray, 3); // <--???
}

void deepCopy(int array[], int size)
{
    int newArray [] = {0,0,0};
    for (int i = 0; i < size; i++)
        array[i] = newArray[i]; 
}

void show(int array[], int size)
{
    int i;
    cout << "array [] = {";
    for (i = 0; i < size-1; i++)
        cout << array[i] << ",";
    cout << array[i] << "}" << endl;
}

【问题讨论】:

  • 使用std::copy()
  • 怎么样?我需要的是执行此操作的语法示例。
  • 你能和memcpy(array,newArray, 3*sizeof(int));核实一下吗?
  • 如果您使用 std::vector 或其他 STL 容器,您可以编写 new=old 并且它会进行复制。

标签: c++ arrays function pointers copy


【解决方案1】:

如果 C++ 11 或更高版本可用,请使用 std::array&lt;T,N&gt; 而不是 C 样式数组。 示例:

std::array<int,3> my_array {1,1,1};
auto new_array=my_array; // deep copy

【讨论】:

    【解决方案2】:

    感谢大家的快速回复! 这么快的帮助,你太棒了!

    下面是它的工作原理

    void shallowCopy(int *array, int size)
    {
        int newArray[] = {5,5,5};
        memcpy(array,newArray, 3*sizeof(int)); // <--WORKS
        // thank you Manthan Tilva!
    }
    

    【讨论】:

    • 嗯,你正在复制到本地数组,这有什么用?
    • 只是想弄清楚如何在 C++ 中的函数中复制数组。不确定语法。谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多