0

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

有没有合理的方法来做到这一点?也许通过使用向量或其他结构?

谢谢 :)

4

1 回答 1

2

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

String *2d_array[3][3] 

如果您想要可变大小的数组,则必须使用 C++ STL(标准模板库)-容器,例如向量或列表:

#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;
        }
}
于 2010-04-08T09:34:33.000 回答