2017-09-30 1 views
0

배열 생성 이해 :이 작업은 임의의 수의 측정 및 임의의 깊이로 배열을 동적으로 구축하는 것입니다. 입력은 임의의 (n) 개의 요소가있는 1 차원 배열 int arr []을받습니다. 예를 들어 int arr= new int[size]과 같은 1 차원 배열을 만들 수 있고 2 차원 배열 int **arr= new int*[size] 등을 만들 수 있습니다.하지만 얼마나 많은 차원을 모르는 경우 어떻게 만들 수 있습니까? 방금 C++을 배우기 시작 했으므로 객체 지향 프로그래밍 및 벡터를 사용할 수 없습니다.1 차원 동적 배열을 N 차원으로 반전

+0

치수는 색인의 문제로 생각할 수 있습니다. – VTT

+0

당신은 1 차원 배열을 만들고 크기를 같은 크기로 만들 수 있음을 의미합니다. 4 차원 배열? –

+0

예를 들어, 6 개의 항목으로 배열을 생성 할 수 있습니다. 6 개의 아이템을 가진 1D 배열, 2D 배열 2x3 또는 3x2 아이템, 1x2x3 또는 1x3x2 아이템을 가진 3D 배열 등을 포함한다고 생각할 수 있습니다. – VTT

답변

0

이러한 의견 제시 자 중 일부는 다차원 배열 대신 큰 1 차원 배열을 만드는 것이 좋습니다. 예

int *arr = new int[wLength * zLength * yLength * xLength]; 

대신이 방법 arr[w][z][y][x] 색인이 같은 색인의

: arr[w * zLength * yLength * xLength + z * yLength * xLength + y * xLength + x]. 물론

당신은 N 차원 배열의 유형 원하는 경우,이 같은 과부하와 템플릿을 사용할 수 있습니다 (N 주어진 상수 표현이다) :

template <typename T, int N> 
struct NDimensionalArray { 
    typedef typename NDimensionalArray<T, N-1>::Type *Type; 
}; 

template<typename T> 
struct NDimensionalArray<T, 0> { 
    typedef T Type; 
}; 

그 정의와 함께, 당신은이를 얻을 수 유형 : 운동 방치 N 차원 배열로

std::is_same<NDimensionalArray<char, 1>::Type, char*>::value; // true 
std::is_same<NDimensionalArray<char, 2>::Type, char**>::value; // true 
std::is_same<NDimensionalArray<char, 3>::Type, char***>::value; // true 

캡슐화 N 차원 배열 newing 대한 클래스, 삭제, 인덱싱,. (힌트 : 생성/삭제할 때 크기를 나타 내기 위해 std::array<unsigned int, N>을 사용하고 색인을 생성 할 때 색인을 사용하십시오).

관련 문제