2013-06-17 8 views
1

C++에서 배열이나 벡터에 차원을 동적으로 추가 할 수 있습니까? 어떻게이 문제에 일반적으로 접근합니까? 또한 N 차원 배열을 인스턴스화 할 수 있도록하는 STL 컨테이너가 있습니까 (예를 들어 다차원 데이터가 포함 된 클래스가있는 경우 클래스 인스턴스화까지 차원 수를 알 수 없음) . 아마도 다음과 같은 것일 수 있습니다 :차원을 C++ 배열에 추가 하시겠습니까?

vector<int> ndim_vector = {20 10 50}; 
some_container<double> c(ndim_vector); 
+0

짧은 대답은 "아니오"입니다. 그렇게 할 수 없습니다. 코드가 얼마나 많은 차원의 컨테이너 내용인지 모를 때 프로그램에서 어떻게 사용하는지 이해하기가 어렵습니다. –

+2

단일 차원 벡터를 사용하고 전체 요소 수에 맞게 크기를 조정할 수 없습니까? – GWW

+0

당신도 보일 수 있습니다 [부스트 구현] (http://www.boost.org/doc/libs/1_53_0/libs/multi_array/doc/user.html) N 차원 배열 – GWW

답변

1

그런 일을 할 수있는 클래스를 작성할 수 있습니다. 예를 들어 OpenCV library은 N 차원 행렬을 제공합니다. 그러나 STL에는 그러한 것이 없습니다. STL 컨테이너에서이 동작을 구현할 수있는 클래스를 직접 만들 수 있습니다. Boost 라이브러리 프로젝트는 multidimensional array library도 제공합니다.

0

표준에 해당 컨테이너가 없습니다. 그러나 관련 클래스 및 템플릿 클래스와 함께 <valarray> 헤더 파일이 포함됩니다. valarray 템플릿 클래스는 일차원이지만 gslice을 사용하면 다차원 동작을 시뮬레이트하기가 어렵지 않습니다. 동적으로 추가하려면 약간 더 많은 작업이 필요합니다.

어쨌든이 모든 기능은 사용자 자신의 클래스에 캡슐화해야합니다 ... 또는 Ralh Tandetzky가 제안한 대안 중 하나를 사용하십시오.

+0

나는 C++에 익숙하지 않은 valarray에 익숙하지 않았지만, 내가 찾고있는 것에 매우 가깝다. 정보 주셔서 감사합니다. – dcdo

관련 문제