我可以创建一个可以复制任意大小的2d数组的'CopyArray'功能吗?

时间:2014-11-17 12:54:13

标签: c++ arrays multidimensional-array

在我的程序中,我需要复制长度数组[3] [8]和数组[3] [3]的2d数组。由于我必须设置参数的方式,我无法在一个函数中执行此操作,所以我当前有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];
        }
    }
}

有没有办法将它压缩成一个函数而不是具有这两个非常相似的函数?

1 个答案:

答案 0 :(得分:2)

如果您通过引用传递数组,则可以有用地指定它们的所有尺寸,如果定义模板函数,则可以使用模板参数来存储这些尺寸。

像这样(也为元素类型推广):

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中的单行代替,但模板也遵循相同的原则。