gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:58:01 25 4
gpt4 key购买 nike

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

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

谢谢:)

最佳答案

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

String *2d_array[3][3] 

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

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

关于可变大小数组的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com