2011-11-28 3 views
4

arr [i] [j]를 통해 액세스 할 수있는 2 차원 int 배열 arr을 얻고 싶습니다.C에서 가변 길이 2 차원 배열을 선언하는 적절한 방법

내가 이해하는 한, int arr[10][15];과 같은 배열을 선언 할 수 있습니다. 내 경우에는 크기가 가변적이지만 배열의 크기가 하드 코드되지 않은 경우이 구문이 작동하지 않는다고 이해하지만 int arr[sizeX][sizeY]과 같은 변수를 사용합니다.

가장 좋은 해결 방법은 무엇입니까?

+2

귀하의 질문에 C가 표시되지만 귀하의 태그는 C++라고 말합니다. 분명히 해줄 수 있니? 또한'sizeX'와'sizeY'가'const'가 아닌 한 배열의 크기를 결정하기 위해 변수를 사용하는 것이 유효한 문법이 아니라는 것이 맞습니다. 그러나 gcc (또는 g ++)는'-ansi' 나'-pedantic' 플래그를 넘겨주지 않는 한 이것을 지원합니다. 나는 여전히 표준 C/C++가 아니므로 사용하지 말 것을 권장합니다. –

답변

11

수동으로 모든 하위 배열을 할당하는 벡터의 std::vector (또는 새로운 C++ 11 std::array를) 다음 한 사용하지 않는 경우 :

int **arr = new int* [sizeX]; 
for (int i = 0; i < sizeX; i++) 
    arr[i] = new int[sizeY]; 

그리고 물론

하지 않습니다 완료되면 모두 delete[]을 잊어 버려.

+0

은'delete []'이 아니어야합니까? – Vladimir

+0

@Vladimir 물론 그렇습니다. –

+0

@ 일부 프로그래머가 어떻게 삭제할 수 있습니까? 이게 사실인가요? delete [] arr []? –

0

배열 구문을 사용할 수 없습니다. 이 언어에서는 배열을 만들 때 컴파일시 상수를 사용해야합니다.

+0

'int **'(또는 원하는 형식)을 사용할 수 있습니다. 'malloc()'을 올바르게 실행하면 두 개의 첨자 연산자를 사용하여 요소에 액세스 할 수 있습니다. –

+0

@Chris Parton : 이것은 배열 구문이 아닙니다. 동적 인 크기의 배열을 에뮬레이션하기 위해 포인터와 new를 사용합니다. –

+1

필자는 결코 말하지 않았다. 나는 다차원 배열과 같은 방식으로 포인터를 사용하여 요소에 액세스 할 수 있음을 지적했다. 이를 위해 구문은 동일합니다. 하지만 그 같은 포인터를 사용하여 배열 구문을 동의합니다. –

0

C++에는 가변 길이 배열이 없습니다. vector<vector<int> >을 사용해보십시오. arr[i][j]을 사용하여 액세스 할 수도 있습니다.

1

c/C++는 다차원 배열을 지원하지 않습니다. 하지만 배열 배열을 지원하지 않습니다 :

//simulate 2-dimension array with 1-dimension array 
    { 
     int x = 20; 
     int y = 40; 
     int * ar = new int(x*y); 
     int idx_x =9; 
     int idx_y=12; 
     ar[idx_x + idx_y * x] = 23; 
    } 
    //simulate 2-dimension array with array of array 
    { 
     int x = 20; 
     int y = 40; 
     int**ar = new int*[y]; 
     for(int i = 0; i< y; ++i) 
     { 
      ar[i] = new int[x]; 
     } 
     ar[9][12] = 0;  
    } 
0

fefe는 벡터 벡터를 사용할 수 있다고 말했습니다. 지. :

#include<iostream> 
#include<vector> 
using namespace std; 

int main() 
{ 
     vector< vector<int> > vec; 
     vector<int> row1; 
     row1.push_back(1); 
     row1.push_back(2); 
     vector<int> row2; 
     row2.push_back(3); 
     row2.push_back(4); 

     vec.push_back(row1); 
     vec.push_back(row2); 

     for(int ix = 0; ix < 2; ++ix) 
      for(int jx = 0; jx < 2; ++jx) 
       cout << "[" << ix << ", " << jx << "] = " << vec[ix][jx] << endl; 

} 
관련 문제