所以......我已经实现了一个可执行散列的版本......我现在的问题是针对析构函数。
我在Hash类中使用了指向Bucket类中的桶的指针数组。问题是同一个桶上可能有多个指针。
在Hash类的析构函数中,我必须删除每个桶然后删除数组,但我必须小心不要删除相同的桶两次(我认为这会导致错误)。为了做到这一点,我使用bool向量来记住存储桶是否已被删除。
我现在的问题是:有没有办法知道在没有使用更多内存(bool矢量)的情况下是否已删除了存储桶?
LE:我使用nullptr(似乎现在正在工作)解决了析构函数问题,但是......另一个问题:我怎样才能完全通过每个桶一次(例如,查找min和max元素)。这次我不能使用nullptr(指针需要保持原状 - 在桶上)
答案 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。