gpt4 book ai didi

c++ - 是否可以制作一个结构节点类型的数组?

转载 作者:行者123 更新时间:2023-11-27 22:39:36 25 4
gpt4 key购买 nike

我只是想知道。假设您需要存储这些值:

营业时间 session 纪要

在一个数组中,下面的实现在逻辑上是否可行?

struct node
{
int hour;
int minutes;
};


int main()
{
int numOfLanding, minGap, hour, minutes;
cin>>numOfLanding;
cin>>minGap;
cout<<endl;

struct node *arr[numOfLanding];

for (int i=0; i<numOfLanding; i++)
{
cin>>hour;
cin>>minutes;
arr[i]->hour=hour;
arr[i]->minutes=minutes;
}

我仍在努力理解结构节点逻辑。任何帮助将不胜感激!

最佳答案

您要问的是:是否可以创建一个在编译时未知但仅在运行时知道大小的数组?是的,你可以,但你选择的方式不是标准的 C++:声明一个像这样的数组

struct node *arr[numOfLanding];

表示使用“variable-length array”,它不是(也从来不是)C++ 标准的一部分。然而,它在 C99 中是 C 的一部分,但随后委员会决定在 C11 中将其设为可选。无论如何都可以找到支持此功能作为扩展的 C++ 编译器:例如 gcc。但如果您使用它,请记住您的代码不可移植。

在 C++ 中执行此操作的标准方法是使用 new[] :

node* arr = new node[numOfLanding];

(请注意,每次都使用关键字 struct 是您在 C 中所做的;在 C++ 中则不需要)

此时,您可以使用 . 访问每个元素, 而不是 -> :

arr[i].hour=hour;
arr[i].minutes=minutes;

使用完数组后,您必须删除它,方法是:

delete[] arr;

不管怎样,这种风格是旧的,现在被认为是不好的。首选方法是使用一个自动为您处理大小的容器,它将管理内存,这样您就不必担心 new[]delete[] .最好的容器是 std::vector .要使用它,首先你必须 #include <vector> , 然后你可以像这样使用它:

std::vector<node> arr(numOfLanding);

for (auto& curr_node : arr) {
cin>>hour;
cin>>minutes;
curr_node.hour=hour;
curr_node.minutes=minutes;
}

关于c++ - 是否可以制作一个结构节点类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105159/

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