数组的大小由用户输入确定,结构数组在for循环中创建。
struct obj{
int h1
int h2
};
int pages;
ifstream in("input21.txt");
string a = "";
in >> a;
pages = stoi(a);
obj* pg[pages];
for(int i = 0; i < pages; i++){ //
in >> a;
int x = stoi(a); // # of entries
in >> a;
obj list[x];
pg[i] = list;
for(int q =0; q < x; q++){
in >> a;
list[q].h1 = b2d(stoi(a));
in >> a;
list[q].h2 = b2d(stoi(a));
}
}`
我不知道如何实现这一点,以及在构建结构之后如何访问结构的每个元素。我该如何开始建造这个结构呢?
我将提供一些提示,但我认为这是一个家庭作业解决方案,所以我会留下一些给你们。
首先,正如Sambalika所说的,obj[x]不受C++标准的支持,尽管您使用的编译器可能支持它。然而,依赖于它是危险的。
您定义的顶部数组:
obj* pg[pages];
除了在标准之外,这还不错。pq[0]是对象*。那很酷。
这可能也没问题:
pg[i] = list;
但是,你所做的。列表是在for-loop的范围内定义的。当循环退出时,它就会消失。一旦循环结束,PQ[0]将指向将被重用的随机内存。
这是个很大的问题。
现在,我不会使用原始数组。我会使用std::vector。
std::vector<std::vector<obj>> myList;
此时,您有了一个列表的动态列表。然后您可以循环(就像您所做的那样)并创建:
std::vector<obj> list;
在内部循环中填充:
obj newObj;
// fill in newobj
list.push_back(newObj);
然后在内部for循环之后:
myList.push_back(list);
Push_back()只是一个append。
有关更多信息,请参阅std::vector的文档和示例。
另一个选择是进入std::shared_ptr,但这是另一个问题。