2010-04-08 3 views
0

저는 C++에 매우 익숙하며 다음과 같은 것은 꼭 필요한만큼 쉽지는 않지만 실제로는 더 전문적인 의견에 감사드립니다.가변 크기 배열의 C++ 배열

본질적으로 다음과 같이 가변 크기 배열의 가변 크기 배열에 대해 동적 반복을 달성하려고합니다.

String *2d_array[][] = {{"A1","A2"},{"B1","B2","B3"},{"C1"}}; 

for (int i=0; i<2d_array.length; i++) { 
    for (int j=0; j<2d_array[i].length; j++) { 
     print(2d_array[i][j]); 
    } 
} 

적절한 방법이 있습니까? 아마도 벡터 나 다른 구조체를 사용하면 될까요?

감사합니다 :)

+2

표준 : : 벡터 : 샘플의 경우 즉, 가변 크기 배열을 원하는 경우에, 당신은 C의 ++의 STL (표준 템플릿 라이브러리)을 사용해야

String *2d_array[3][3] 

벡터 또는 목록 같은 -containers 것 확실히 합리적인 방법이 될 것입니다. –

+0

번호가있는 변수를 시작할 수 없습니다 ... –

+0

나는 bada에 대해 C++을 배우고 있습니다. 밝혀졌지만 Std ::를 사용할 수 없습니다. 대신 ArrayList의 bada ArrayList를 사용하고 있습니다. 불행히도 현재 C++가있는 상태에서 – adam

답변

2

당신은 C++ 문자열 개체의 일반 C 배열을 사용하고 있습니다. C에는 가변 크기의 배열이 없습니다. 이 코드가 어쨌든 컴파일되지 않는다는 것 외에도, 컴파일러는 최대 길이가 선언 된 배열을 생성합니다.

#include <string> 
#include <vector> 

void f() 

{ 
    typedef std::vector<std::string> CStringVector; 
    typedef std::vector<CStringVector> C2DArrayType; 
    C2DArrayType theArray; 

    CStringVector tmp; 
    tmp.push_back("A1"); 
    tmp.push_back("A2"); 
    theArray.push_back(tmp); 

    tmp.clear(); 
    tmp.push_back("B1"); 
    tmp.push_back("B2"); 
    tmp.push_back("B3"); 
    theArray.push_back(tmp); 

    tmp.clear(); 
    tmp.push_back("C1"); 
    theArray.push_back(tmp); 

    for(C2DArrayType::iterator it1 = theArray.begin(); it1 != theArray.end(); it1++) 
     for(CStringVector::iterator it2 = it1->begin(); it2 != it1->end(); it2++) 
     { 
      std::string &s = *it2; 
     } 
} 
+1

은 코드 크기가 한 단계 증가했습니다. 배열과 같은 벡터를 초기화 할 수있는 날을 고대합니다. C++ 0X, 앞으로 나와주십시오. – daramarak