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= 5
및 rowCount = 4
는 다음을 생성합니다.
포인터 배열을 삭제하기 전에 루프를 사용하여 각 행을 개별적 delete
것을 잊지 마십시오. 다른 답변의 예.
출처 : https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다. (0) | 2021.07.06 |
---|---|
POSIX를 사용하여 C ++에서 명령을 실행하고 명령의 출력을 얻는 방법 (0) | 2021.07.06 |
__name__ == “__main__”: 하면 어떻게 될까? (0) | 2021.07.02 |
C ++에서 변수 데이터 타입을 출력 하는 법 (0) | 2021.07.01 |
정렬되지 않은 배열을 처리하는 것보다 정렬 된 배열을 처리하는 것이 더 빠른 이유 (0) | 2021.07.01 |