我对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]);
}
}
有合理的方法吗?也许通过使用矢量或其他结构?
谢谢:)
答案 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;
}
}