2011-02-02 2 views
0

정수 배열의 차원 "n"을 매개 변수로 가져 오는 함수를 구현하려고합니다. 또한이 함수는 배열의 크기를 정의하는 값 "k_1, k_2, ..., k_n"을 가져옵니다. 그런 다음이 함수는이 n 차원 배열을 채 웁니다.컴파일 타임에 차원을 알 수없는 경우 다차원 배열을 구현하는 방법은 무엇입니까?

어떻게 효율적으로 C++로 구현할 수 있습니까?

N = 3의 예를 들어 내가

vector < vector < vector <int> > > array; 

사용하는 것이하지만 컴파일시에 치수를 알 수 없습니다.

+0

n이 측정 기준 인 경우 k_1 ... k_n은 데이터가 충분하지 않습니다. – Falmarri

+0

n 차원 배열이 문제의 일부입니까 아니면 솔루션입니까? – abesto

답변

3

색인에 대한 오프셋의 곱셈을 사용하여 1 차원 배열, 가짜 다른 차원을 사용하고, 차원 벡터에 의해 크기를 전달할 수 있습니다 즉

std::vector<int> create_md_array(const std::vector<int> & dimensions) 
{ 
    int size = std::accumulate(dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()); 
    return std::vector<int>(size); 
} 
+0

멋진 아이디어. 그런 다음이 배열의 요소를 가져오고 설정하기위한 구문 해석을 제공하기 위해'std :: vector '을 확장 할 수 있습니다 (예 :'operator()'오버로드) –

+0

@Murilo :'vector'를 확장하지 않겠습니다. 이것은 별도의 클래스로 래핑됩니다. –

+0

실제로는 cpp에 N 차원 배열을 구현했습니다. 이것이 내가 한 일이다. – vdolez

0

당신은 선택의 몇 가지있다. 기본적으로 좌표를 크기로 곱하여 다차원 주소를 선형화하고 데이터를 보유하는 간단한 std::vector<whatever>을 직접 구현할 수 있습니다.

또는 std::valarray 및 친구를 사용하여 동일한 작업을 수행 할 수 있습니다. 그것은 당신이 묘사하는 상황을 위해 특별히 고안된 일련의 수업을 가지고 있습니다. 그러나 거의 사용되지 않아서 거의 아무도 학생들을 이해하지 못합니다. 코드를 직접 작성하면 대부분의 사람들이 읽고 이해하기가 더 쉬울 수 있습니다.

관련 문제