我正在使用由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 *節點,它不會刪除最後一個節點。 –