是否可以创建一个struct node类型的数组?

时间:2018-04-30 17:11:37

标签: c++ arrays struct

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

小时 分钟

在数组内部,逻辑上可能是以下实现吗?

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

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

2 个答案:

答案 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>

注意:由于它是一个数组,请使用'。'访问权限,而不是->