我只是想知道。假设您需要存储这些值:
小时 分钟
在数组内部,逻辑上可能是以下实现吗?
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;
}
我仍然非常努力地理解结构节点逻辑。任何帮助将不胜感激!
答案 0 :(得分:3)
您要问的是:是否可以创建一个在编译时未知的大小数组,但仅限于运行时?是的,你可以,但你选择的方式不是标准的C ++:声明像
这样的数组struct node *arr[numOfLanding];
表示使用&#34; variable-length array&#34;,它不是(并且从未成为)C ++标准的一部分。它是C的一部分,然而,在C99中,但委员会决定在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;
}
答案 1 :(得分:1)
是的,您可以拥有一系列节点。
但是,如果您坚持使用数组,并且在编译时不知道容量,则必须在运行时分配它:
struct node
{
int hour;
int minutes;
};
int main()
{
int numOfLanding, minGap, hour, minutes;
cin>>numOfLanding;
cin>>minGap;
cout<<endl;
node *arr = new node[numOfLanding];
for (int i=0; i<numOfLanding; i++)
{
cin>>hour;
cin>>minutes;
arr[i].hour=hour;
arr[i].minutes=minutes;
}
// Remember to delete the array.
delete[] arr;
return EXIT_SUCCESS;
}
更安全的替代方法是使用std::vector<node>
。
注意:由于它是一个数组,请使用'。'访问权限,而不是->
。