【问题标题】:What are structs initialized as C++什么是初始化为 C++ 的结构
【发布时间】:2016-02-22 04:59:35
【问题描述】:

我有一个看起来像这样的结构......

struct Node {
     std::string key, value;
     Node* link;
};

如果我这样初始化一个节点数组...

Node* linkedlist = new Node[100]

我将如何迭代以计算当前存在多少个结构?我目前正在实现一个哈希图,我需要计算有多少活动存储桶。

【问题讨论】:

  • 我不明白。如果你创建一个包含 100 个节点的数组,那么你就有 100 个节点。
  • 但是它们的值不是没有初始化吗?
  • keyvalue 是 . link 会有垃圾,除非你把它设置成什么。
  • 在 C/C++ 中,除非有构造函数,否则不会初始化任何内容。您需要显式初始化您的 link 变量。
  • 谢谢,那么有没有办法检查某物是否是垃圾?如果它们是垃圾,那是否意味着不使用桶?我希望对此进行检查,以便确定正在使用哪些存储桶。

标签: c++ struct hashmap


【解决方案1】:

什么是初始化为 C++ 的结构

当你使用

Node* linkedlist = new Node[100];

数组的所有元素都默认初始化。 keyvalue 通过调用 std::string 的默认构造函数默认初始化。 link 默认已初始化,即未初始化。

我将如何迭代以计算当前存在多少个结构?

给定一个指针,你不能这样做。这就是为什么std::vector 优于动态分配的原始数组的原因。通过std::vector,您可以获得更多功能。

代替

Node* linkedlist = new Node[100];

使用

std::vector<Node> linkedlist(100);

更新,以回应 OP 的评论

当您不允许使用std::vector 时,您必须自己跟踪数组中的项目数。

int numItems = 100; // It could be obtained from the user input also.
Node* linkedlist = new Node[numItems];

现在您可以依靠 numItems 的值在其余代码中迭代 Nodes 数组。

【讨论】:

  • 非常感谢您的回复。我想我可以检查用户名字符串是否为空,从而确定是否使用了存储桶?
  • @Xari,我的建议是避免使用原始指针并使用std::vector
  • 啊,不幸的是我的教授不允许我在这种情况下使用向量或智能指针。因此,我在确定如何迭代我的东西时遇到了一个难题。通常我为我的 LinkedList 创建一个类并将节点分配给 nullptr。
  • 我认为您的教授还希望您让每个链接指针指向下一个对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2011-03-02
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多