C ++可变大小数组的数组

时间:2010-04-08 08:38:14

标签: c++ multidimensional-array bada

我对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]);
    }
}

有合理的方法吗?也许通过使用矢量或其他结构?

谢谢:)

1 个答案:

答案 0 :(得分:2)

您正在使用C ++字符串对象的普通C数组。在C中没有可变大小的数组。除此之外,这个代码无论如何都不会编译,在这样的构造中,编译器将生成一个具有声明的最大长度的数组数组。在样本案例中

String *2d_array[3][3] 

如果你想要可变大小的数组,你必须使用C ++ STL(标准模板库) - 容器,如vector或list:

#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;
        }
}