2015-11-19 117 views
-3

我有一个结构,看起来像这样...什么是结构初始化为C++

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

如果我初始化为这样的节点组成的数组...

Node* linkedlist = new Node[100] 

我怎么会遍历以计算目前存在多少结构?我正在实现一个hashmap,我需要统计有多少个活动桶。

+0

我不明白。如果您创建了一个包含100个节点的数组,则您有100个节点。 – NathanOliver

+0

但是它们的值不是初始化的吗? –

+0

'key'和'value'是。除非你将其设置为“链接”,否则将会产生垃圾。 – NathanOliver

回答

1

当您使用

Node* linkedlist = new Node[100]; 

所有数组的元素是默认初始化什么是初始化为C++

结构。 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值迭代的Node在你的代码的其余部分在阵列上。

+0

非常感谢您的回复。我想我可以检查用户名字符串是否为空,从而确定该桶是否被使用? –

+0

@Xari,我的建议是避免原始指针并使用'std :: vector'。 –

+0

啊,不幸的是我的教授不允许我在这种情况下使用向量或智能指针。因此,我很难确定如何遍历我的东西。通常我为我的LinkedList创建一个类并将节点分配给nullptr。 –