extendible哈希 - 析构函数C ++

时间:2015-06-14 12:18:43

标签: c++ hash

所以......我已经实现了一个可执行散列的版本......我现在的问题是针对析构函数。

我在Hash类中使用了指向Bucket类中的桶的指针数组。问题是同一个桶上可能有多个指针。

在Hash类的析构函数中,我必须删除每个桶然后删除数组,但我必须小心不要删除相同的桶两次(我认为这会导致错误)。为了做到这一点,我使用bool向量来记住存储桶是否已被删除。

我现在的问题是:有没有办法知道在没有使用更多内存(bool矢量)的情况下是否已删除了存储桶?

LE:我使用nullptr(似乎现在正在工作)解决了析构函数问题,但是......另一个问题:我怎样才能完全通过每个桶一次(例如,查找min和max元素)。这次我不能使用nullptr(指针需要保持原状 - 在桶上)

2 个答案:

答案 0 :(得分:0)

只需迭代使用您的擦除功能

(->> {:value 2 :children [{:value 7} {:value 88 :children [{:value 5}]}] } 
     (tree-seq map? :children)
     (map :value)) ;;=> (2 7 88 5)

答案 1 :(得分:0)

  

我在Hash类中使用了一个指向存储桶的指针数组   来自Bucket。问题是可能有多个指针   同样的桶。

     

我现在的问题是:有没有办法知道桶是否已经存在   没有使用更多内存(bool矢量)被删除?

当然 - 使用引用计数。将一个整数成员变量放在Bucket类中,初始化为零。每当您创建指向该Bucket对象的指针时,请递增整数。无论何时使指向Bucket的指针无效(即,无论何时在该指针上调用delete),都会减小整数成员变量。如果该减量导致整数变为零,则您知道Bucket没有指向它的指针,因此删除Bucket。