2017-05-05 7 views
0

시도했지만 작동하지 않습니다! 하나가 나를 도울 수 이 매우 중요 :(포인터를 사용하지 않고 함수에 동적 2 차원 배열을 전달하는 방법은 무엇입니까?

#include <iostream> 
using namespace std; 
int a[100][100]; 

void read(int a[][100],int n) 
{ 
    int i,j; 
    for(i=0;i<n;i++) 
     for(j=0;j<n;j++) 
    cin>>a[i][j]; 
} 

int main() 
{ 
    int n; 
    cin>>n; 
    int a[n][n]; 
    read(a,n); 
} 
+1

int int [n] [n];은 표준 C++가 아닌 VLA입니다. – Jarod42

+0

매개 변수를 전환해야합니다. 'int [n] '이라고 쓰면, 배열 크기의 값을 사용할 수있다 : void read (int n, int a []]' – mch

+0

'a [] []'의 충돌 선언이있다. –

답변

2

불분명 구문 참조로 배열을 전달하는 것입니다하시기 바랍니다 있습니다 :

void read(int (&a)[100][100], int n) 

#include <iostream> 

void read(int (&a)[100][100], int n) 
{ 
    for(int i = 0; i < n; i++) 
     for(int j = 0; j < n; j++) 
      std::cin >> a[i][j]; 
} 

int main() 
{ 
    int n; 
    std::cin >> n; 
    int a[100][100]; 
    read(a, n); 
} 

의 결과로하지만 당신은 선호 할 수 std::vector :

#include <iostream> 
#include <vector> 

void read(std::vector<std::vector<int>> &mat) 
{ 
    for (auto& v : mat) { 
     for (auto& e : v) { 
      std::cin >> e; 
     } 
    } 
} 

int main() 
{ 
    int n; 
    std::cin >> n; 
    std::vector<std::vector<int>> mat(n, std::vector<int>(n)); 
    read(mat); 
} 
+0

예, 이것을 시도합니다. –

0

태그가 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 같은 표준 템플릿 라이브러리의 추가 방법과. 많은 작업을 쉽게 처리 할 수 ​​있습니다.