Могу ли я создать функцию «CopyArray», которая может копировать 2d-массивы любого размера?

0

В моей программе мне нужно скопировать 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];
        }
    }
}

Есть ли способ сконденсировать это в одну функцию вместо того, чтобы иметь эти две очень похожие функции?

  • 3
    Более простое решение: используйте std::vector или std::array . Если вы застряли, используя необработанные массивы, передайте размеры a и b отдельно, тогда у вас может быть одна функция для любого массива.
  • 1
    Используйте шаблон функции.
Показать ещё 3 комментария
Теги:
arrays
multidimensional-array

1 ответ

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, но шаблон будет следовать одному и тому же принципу.

  • 0
    Если я могу сделать предложение, то вы должны сделать arrayB постоянным.
  • 0
    @JoachimPileborg Ты прав. (Я даже сделал ошибку «обратного копирования», когда проверял это… Позор. Ужас.)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню