首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可扩展的散列析构函数C++

可扩展的散列析构函数C++
EN

Stack Overflow用户
提问于 2015-06-14 20:18:43
回答 2查看 173关注 0票数 0

所以..。我已经实现了一个版本的exendible hashing...my问题现在是针对析构函数的。

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

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

我现在的问题是:有没有办法在不使用更多内存(布尔向量)的情况下知道存储桶是否已经被删除?

LE:我使用nullptr解决了析构函数的问题(现在似乎可以工作了),but...another问题:我如何才能准确地遍历每个存储桶一次(例如,为了找到最小和最大元素)。这次我不能使用nullptr (指针需要留在原来的位置--在存储桶上)

EN

回答 2

Stack Overflow用户

发布于 2015-06-14 21:26:15

只需反复使用你的擦除函数

代码语言:javascript
复制
while (size ())
{
    erase(begin());
}
票数 0
EN

Stack Overflow用户

发布于 2015-06-14 22:01:14

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

我现在的问题是:有没有办法在不使用更多内存(布尔向量)的情况下知道存储桶是否已经被删除?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30829259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档