2015-06-14 95 views
0

所以...我已經實現了exendible哈希的一個版本...我現在的問題是析構函數。可擴展哈希 - 析構函數C++

我在Hash類中使用了一個指向數組Bucket的指針數組。問題是在同一個存儲桶中可能有多個指針。

在Hash類的析構函數中,我必須刪除每個存儲桶然後刪除數組,但我必須小心不要刪除同一個存儲桶兩次(我認爲這會導致錯誤)。爲了做到這一點,我使用了一個bool向量來記憶存儲桶是否已經被刪除。

我現在的問題是:有沒有辦法知道一個存儲桶是否已經被刪除而沒有使用更多的存儲器(布爾向量)? LE:我使用nullptr解決了析構問題(似乎現在正在工作),但是......另一個問題是:我怎樣才能精確地遍歷每個桶(例如,查找最小和最大元素) 。我不能使用nullptr這段時間(指針需要保持他們在哪裏 - 在桶)

+1

也許考慮使用'std :: shared_ptr'?它使用每個objet的2-3個字的內存和共享狀態,但這對於簡單性和安全性來說往往是一個很好的折衷。 – tux3

+0

在正常操作期間遇到同樣的問題。所以,只需'shared_ptr'並完成它。 –

+0

感謝您的快速回復...嗯,這是一個單一的項目,我真的不允許使用std :: shared_ptr ... –

回答

0

只是反覆使用擦除功能

while (size()) 
{ 
    erase(begin()); 
} 
+0

你是什麼意思?我有刪除指針[我]; ...其中指針[i]是指針之一。但是,如果我刪除它,然後稍後(讓我們說指針[j]其中j>我)我不得不再次刪除它,我不能(因爲我已經刪除它,指針[j]指向不存在的東西了 –

+0

我只是覺得我應該刪除這個存儲桶,然後把這個存儲桶上顯示的所有指針設置爲NULL。這是個好主意嗎? 還有另外一個問題...我怎樣才能瀏覽(用Google翻譯翻譯它。 。如果是錯誤的動詞,則應予以考慮:D)每個桶恰好1次(例如,查找最小和最大元素) –

+0

在編寫yde destuctor之前,刪除了evetything,找出一個刪除函數以刪除只有一個 –

0

我在哈希類的陣列中使用指向類Bucket的桶 的指針。問題是可以有多個指針 同一個存儲桶。

我現在的問題是:有沒有辦法知道一個存儲桶是否已經被刪除而不使用更多的存儲器(布爾向量)?

確定使用參考計數。將一個整數成員變量放入Bucket類中,初始化爲零。每當你創建一個指向該Bucket對象的指針時,就增加整數。每當你使一個指向Bucket的指針無效時(也就是說,每當你對該指針調用delete時),就減少整型成員變量。如果該遞減導致整數變爲零,那麼您知道Bucket沒有指向它的指針,因此刪除Bucket。

+0

好主意...但使用nullptr似乎更容易:D ...顯然它的工作 –