在我的程序中,我需要复制长度数组[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];
}
}
}
有没有办法将它压缩成一个函数而不是具有这两个非常相似的函数?
答案 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中的单行代替,但模板也遵循相同的原则。