我有一个结构,看起来像这样...什么是结构初始化为C++
struct Node {
std::string key, value;
Node* link;
};
如果我初始化为这样的节点组成的数组...
Node* linkedlist = new Node[100]
我怎么会遍历以计算目前存在多少结构?我正在实现一个hashmap,我需要统计有多少个活动桶。
我有一个结构,看起来像这样...什么是结构初始化为C++
struct Node {
std::string key, value;
Node* link;
};
如果我初始化为这样的节点组成的数组...
Node* linkedlist = new Node[100]
我怎么会遍历以计算目前存在多少结构?我正在实现一个hashmap,我需要统计有多少个活动桶。
当您使用
Node* linkedlist = new Node[100];
所有数组的元素是默认初始化什么是初始化为C++
结构。 key
和value
通过调用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
在你的代码的其余部分在阵列上。
非常感谢您的回复。我想我可以检查用户名字符串是否为空,从而确定该桶是否被使用? –
@Xari,我的建议是避免原始指针并使用'std :: vector'。 –
啊,不幸的是我的教授不允许我在这种情况下使用向量或智能指针。因此,我很难确定如何遍历我的东西。通常我为我的LinkedList创建一个类并将节点分配给nullptr。 –
我不明白。如果您创建了一个包含100个节点的数组,则您有100个节点。 – NathanOliver
但是它们的值不是初始化的吗? –
'key'和'value'是。除非你将其设置为“链接”,否则将会产生垃圾。 – NathanOliver