我正在使用由C++中的链接列表表示的数组和存储桶构建哈希表。当我尝试清除哈希表时,我遇到了一些非常奇怪的事情,如果有人能解释为什么会发生这种情况,我将不胜感激。在C++中删除哈希表
此代码工作正常:
for(int i = 0; i < bins; i++)
{
while(map[i]->next != nullptr)
{
LN* toDelete = map[i];
map[i] = map[i]->next;
delete toDelete;
}
}
但是由于某种原因,如果我这样做,它不会删除任何东西了:
for(int i = 0; i < bins; i++)
{
LN* node = map[i]
while(node->next != nullptr)
{
LN* toDelete = node;
node = node->next;
delete toDelete;
}
}
每个木桶是由拖车链表的代表为什么我要检查node-> next不是节点。从我对指针的正确理解中,节点应该引用与map[i]
相同的东西,所以当我调用节点上的删除时,它应该删除map[i]
和节点引用的对象。
谢谢您提前
请[编辑]你的问题提供了[MCVE。 –
我假设你正在做这个散列表作为练习?否则,你应该使用['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)。 –
您的代码(两个示例)都不会删除* all *节点,它不会删除最后一个节点。 –