C ++ Передача динамического массива, определяемого параметром

Эта функция была задана несколько раз здесь, но меня интересует конкретный случай. Возможно ли, чтобы размер передаваемого массива определялся дополнительным аргументом?

В качестве примера, скажем, я хочу, чтобы функция печатала двумерный массив. Тем не менее, массив может не иметь одинаковые размеры каждый раз. Было бы идеально, если бы у меня были дополнительные аргументы, определяющие размер этого массива. Я знаю, что я мог бы легко выключить n для числа здесь по мере необходимости, но если у меня есть более сложные функции с отдельными заголовочными файлами, кажется глупым переходить и редактировать заголовочные файлы каждый раз, когда появляется массив другого размера. Следующие результаты в error: use of parameter 'n' outside function body... что я понимаю, но хотел бы найти обходной путь. Я тоже пробовал с g++ -std=c++11 но все та же ошибка.

#include <iostream>
using namespace std;

void printArray(int n, int A[][n], int m) {
for(int i=0; i < m; i++){
for(int j=0; j<n; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
}

int main() {

int A[][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};

printArray(3, A, 4);

return 0;
}

Предположительно, это можно сделать с C99 а также упоминается в этот вопрос но я не могу понять, как с C ++.

0

Решение

Это работает:

template<size_t N, size_t M>
void printArray( int(&arr)[M][N] ) {
for(int i=0; i < M; i++){
for(int j=0; j < N; j++) {
std::cout << A[i][j] << " ";
}
std::cout << std::endl;
}
}

если вы готовы поместить код в заголовочный файл. В качестве бонуса он выводит N а также M для тебя.

3

Другие решения


По вопросам рекламы [email protected]