Так как это помечено C++. Я хотел бы предложить использовать std::vector. Это динамический контейнер, который очень полезен. Вы можете изменить его размер, очистить его, заполнить его с легкостью. Как только вы поймете его базовое использование, они пригодятся вам в вашей будущей разработке C++. Я немного изменил ваш код:
#include <iostream>
#include <vector>
using namespace std;
void read(vector<vector<int> >& arr,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>arr[i][j];
}
int main ()
{
int N;
cin>>N;
vector<vector<int> > arr(N, vector<int>(N));
read(arr, N);
}
У них есть много преимуществ перед примитивными массивами, например, их можно легко инициализировать, предположим, вы хотите инициализировать все до нуля:
vector<vector<int> > arr(N, vector<int>(N, 0));
Вам не нужно беспокоиться о добавлении размера массива при передаче функций. вектор может легко справиться с этим:
for(i = 0; i < arr.size(); i++) {
for(j = 0; j < arr[i].size(); j++) {
// do stuff
}
}
Кроме того, с добавленными методами стандартной библиотеки шаблонов, такими как fill
, swap
. Многие операции выполняются легко.
person
Rohan Kumar
schedule
05.05.2017
int a[n][n];
- это VLA, а не стандартный C++. - person Jarod42   schedule 05.05.2017int n
раньше, вы можете использовать значение в размере массива:void read(int n, int a[][n])
- person mch   schedule 05.05.2017a[][]
- person Rohan Kumar   schedule 05.05.2017c++
. Почему бы вам не использоватьstd::vector
? Он создан именно для таких случаев. - person alexeykuzmin0   schedule 05.05.2017a
находятся в разных областях, поэтому конфликта нет. - person mch   schedule 05.05.2017main
), и глобальная переменнаяa[][]
? - person Jonas   schedule 05.05.2017