В моей программе мне нужно скопировать 2d массивы массивов длин [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, но шаблон будет следовать одному и тому же принципу.
arrayB
постоянным.
std::vector
илиstd::array
. Если вы застряли, используя необработанные массивы, передайте размерыa
иb
отдельно, тогда у вас может быть одна функция для любого массива.