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

标签 c++ arrays struct

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

营业时间 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/

相关文章:

c++ - 如何从迭代变量获取constexpr?

java - 从 Java 到 C++ : how to use one custom class var within another custom class?

javascript - 根据对象数组中的属性过滤掉非空和未定义的项目

c++ - 结构 vector 与结构 vector 的映射

c - 在小结构的末尾而不是在 2 个成员之间进行对齐填充是否对性能更好?

c++ - 将 C++ 中的两个 xpath_node_set 与 pugixml 1.4 进行比较

c++ - 我可以将英特尔的 TBB 与 gcc 一起使用吗?

javascript - 将对象数组分组为特定格式

javascript - 遍历此 JavaScript 的最佳方法是什么

c++ - 如何访问第二个结构中 void* 指向的结构的元素