프로그래밍 언어/C++

new를 사용하여 C ++에서 2차원 배열을 선언하는 방법

Rateye 2021. 7. 6. 10:21
728x90
반응형

 

질문 : new를 사용하여 C ++에서 2D 배열을 어떻게 선언합니까?

new를 사용하여 2D 배열을 어떻게 선언합니까?

"일반"배열의 경우 다음과 같이합니다.

int* ary = new int[Size]

그러나

int** ary = new int[sizeY][sizeX]

a) 작동 / 컴파일하지 않고 b) 다음을 수행하지 않습니다.

int ary[sizeY][sizeX] 

그렇습니다.

답변

행 길이가 컴파일 시간 상수 인 경우 C ++ 11은

auto arr2d = new int [nrows][CONSTANT];

이 답변을 참조하십시오. C ++의 확장으로 가변 길이 배열을 허용하는 gcc와 같은 컴파일러는 여기에 표시된대로 new 를 사용하여 C99에서 허용하는 것과 같은 완전한 런타임 가변 배열 차원 기능을 얻을 수 있지만 이식 가능한 ISO C ++는 첫 번째 차원 만 변수로 제한됩니다.

또 다른 효율적인 옵션은 큰 1d 배열로 2d 인덱싱을 수동으로 수행하는 것입니다. 다른 답변 에서 알 수 있듯이 실제 2D 배열과 동일한 컴파일러 최적화를 허용합니다 (예 : 배열이 서로 별칭을 지정하지 않거나 겹치지 않는지 확인 또는 확인).

그렇지 않으면 효율적인 단일 대규모 할당이 아니지만 연속적인 2D 배열과 같은 2D 구문을 허용 하기 위해 배열에 대한 포인터 배열을 사용할 수 있습니다. 다음과 같이 루프를 사용하여 초기화 할 수 있습니다.

int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
    a[i] = new int[colCount];
    

위의 경우 colCount= 5rowCount = 4 는 다음을 생성합니다.

여기에 이미지 설명 입력

포인터 배열을 삭제하기 전에 루프를 사용하여 각 행을 개별적 delete 것을 잊지 마십시오. 다른 답변의 예.

출처 : https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new
728x90
반응형