2010-04-08 108 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

的std ::矢量肯定會是一個合理的方式。 – 2010-04-08 08:42:01

+0

你不能用數字啓動變量... – 2010-04-08 08:51:47

+0

我正在爲bada學習C++。原來,不能使用Std :: - 所以我使用ArrayList的ArrayList來代替。 – adam 2010-04-08 13:07:38

回答

2

您正在使用C++字符串對象的純C數組。在C中沒有可變大小的數組。除此之外,該代碼不會編譯,在這樣的構造中,編譯器將生成一個聲明最大長度的數組數組。在樣本的情況下,這將是

String *2d_array[3][3] 

如果你想可變大小的數組,你必須使用C++ STL(標準模板庫)作爲載體或列表-containers例如:

#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++版本中,代碼大小增加了一個數量級。我期待着我們可以像數組一樣初始化矢量的那一天。 C++ 0X,請繼續前進。 – daramarak 2010-04-08 09:47:44