2013-08-07 2 views
0

숫자가 필요한 객체의 수를 작성해야합니다. 필요한 변수가 별도의 변수에 종속되어 있습니다. 설명하는 가장 좋은 방법은 psudo 코드 예제입니다.C에서 복수 동적 배열을 생성해야합니다.

int num = 4; 
for(int i=0;i<num;i++){ 
    object_type arrayi [dynamic size]; 
} 

그래서 나는 각각 array0, array1, array2, array3라는 4 개의 배열이 필요하며 모두 동적 배열이어야합니다. C++에서 이것을 수행 할 수 있습니까?

+1

그리고 [std : vector <>'s] (http://en.cppreference.com/w/cpp/container/vector)를 사용하고 있지 않으므로 ...? – WhozCraig

답변

2

예, 대신 std::vector<object_type>을 사용하십시오. 임의의 크기로 크기를 조정할 수 있습니다. 그렇지 않으면 배열 당신은

ObjectType* myArray = new ObjectType[number]; 

대신 표준 : : 벡터를 사용하여 권장 동적 할당을 사용할 수 있습니다.

5
std::array<std::vector<object_type>, 4> array; 
for (auto & v : array) 
    v.resize(dynamic_size); 

이름은 array[0]array[1]이, 등등 ... 대신 array1의, array2는, 등등 ...하지만 누가 무슨 상관입니까? 당신이 절대적으로 그 이름을 가지고 있어야한다면, 카시오의 대답이 최선의 방법입니다.

사전 C++ (11) 대안 : 당신이 배열의 변수 번호를 원하는 경우

std::vector<object_type> array[4]; 
for (size_t i=0; i<4; ++i) 
    array[i].resize(dynamic_size); 

는, 당신은 벡터의 벡터를 사용할 수 있으며, 실제로 그에 대한 초기화도 쉽다. 그것은 루프가 필요하지 않습니다, 당신은 생성자에서 할 수 있습니다. 다시 OP 읽기

std::vector<std::vector<object_type>> array(num, std::vector<object_type>(dynamic_size)); 
+2

은 현재 예제에서 기본값으로 사용할 수있는 C++ 11입니다. –

+2

@GrahamGriffiths : 예, 그렇게 생각합니다. 그것을 사용하는 것이 제한되어있는 사람들은 아마도 전문적인 프로그래머 일 것이고 코드를 스스로 조정하는 방법을 알아낼 수 있습니다. 새로운 프로그래머는 오래된 컴파일러를 사용할 이유가 거의 없습니다. 하지만 어쨌든 대안을 추가 할 것입니다. –

+0

@BenjaminLindley - 질문은 "사람들이 C++ 11을 사용할 수 있습니까?"이 아니라 "C++ 11을 사용하여 설명해야합니까?"뿐이라고 생각합니다. C++ 11은 여러 가지면에서 "vanila"C++보다 복잡하며 분명히 기본을 모르는 사람을 위해 ... 나는 간단한 언어 개념 (심지어 C와 유사한 것)으로 설명하는 것이 더 나은 것으로 안다. – rabensky

0

, 배열의 수는 컴파일시에 알 수없는 나에게 보인다. 이 경우는 std::vector<std::vector<object_type>> 사용할 수

#include <vector> // ... // int num = ???, dynamic_size = ???; std::vector<std::vector<object_type>> vs(num); for (auto& v: vs) v.resize(dynamic_size); 

후는, i 번째의 배열 (벡터)의 j 번째 엘리먼트에 대한 참조를 얻을 vs[i][j]를 사용할 수있다.

조언 부분 : 선형 대수 행렬에이 (std::vector<std::vector<double>>)을 사용하지 마십시오.

보너스 : C++ 14이 할 수 있습니다 (실제로 일부 컴파일러 확장으로 C++에서 허용하는 C99 기능입니다)에서 자세한 내용

#include <vector> 
// ... 
// int num = ???, dynamic_size = ???; 
std::vector<object_type> vs[num]; 
for (auto& v: vs) 
    v.resize(dynamic_size); 

참조 this 게시물.

0

C++에서 원하는 방식으로 변수를 동적으로 생성하는 방법이 있다면 나는 들어 본 적이 없다.

성능이 문제가되고 1 차원 배열 (배열 배열 또는 배열 벡터 배열이 아님)을 구성해야하는 경우 빌드 타임에 코드 생성을 수행하여 원하는만큼 만들 수 있습니다 . 그것은 C++의 외부입니다. 이것은 C++ 텍스트 파일을 출력하는 사전 빌드 명령입니다.

성능에 문제가 없다면 Benjamin과 같은 배열 벡터를 구성하면 큰 효과를 볼 수 있습니다.

+1

C++ 11에서는'void f (int n) {double x [ 엔]; // ...}'. 그러나 C99에서는이를 허용합니다 (가변 길이 배열이라고 함). 일부 컴파일러는이를 확장자로 허용하고 C++에서 이것은 합법적입니다 (그러나 C99와는 다른 의미를가집니다). –