我可以创建一个可以复制任何大小的 2D 数组的 'CopyArray' 函数吗?

Can I create a 'CopyArray' function that can copy 2d arrays of any size?

本文关键字:2D 数组 函数 CopyArray 任何大 创建 一个 复制 我可以      更新时间:2023-10-16

在我的程序中,我需要复制长度为数组[3][8]和数组[3][3]的二维数组。由于我必须设置参数的方式,我无法在一个函数中执行此操作,所以我目前有 2 个。

void copyArray(float arrayA[][8], float arrayB[][8])
{
    for (int a = 0; a < 3; a++)
    {
        for (int b = 0; b < 8; b++)
        {
            arrayA[a][b] = arrayB[a][b];
        }
    }
}
void copyArray(float arrayA[][3], float arrayB[][3])
{
    for (int a = 0; a < 3; a++)
    {
        for (int b = 0; b < 3; b++)
        {
            arrayA[a][b] = arrayB[a][b];
        }
    }
}

有没有办法将其压缩为一个函数,而不是拥有这两个非常相似的函数?

如果通过引用传递数组,则可以有效地指定其所有维度,如果定义模板函数,则可以对这些维度使用模板参数。

像这样(也适用于元素类型):

template<typename T, size_t x, size_t y>
void copyArray(T (&arrayA)[x][y], const T (&arrayB)[x][y])
{
    for (int a = 0; a < x; a++)
    {
        for (int b = 0; b < y; b++)
        {
            arrayA[a][b] = arrayB[a][b];
        }
    }
}

这可能可以用 C++ 11 中的单行代码替换,但模板将遵循相同的原则。