所以..。我已经实现了一个版本的exendible hashing...my问题现在是针对析构函数的。
我在Hash类中使用了一个指针数组,这些指针指向来自类Bucket的桶。问题是在同一个存储桶上可能有多个指针。
在Hash类的析构函数中,我必须删除每个存储桶,然后删除数组,但我必须小心不要删除相同的存储桶两次(我认为这会导致错误)。为了做到这一点,我使用了一个布尔向量来记录存储桶是否已经被删除。
我现在的问题是:有没有办法在不使用更多内存(布尔向量)的情况下知道存储桶是否已经被删除?
LE:我使用nullptr解决了析构函数的问题(现在似乎可以工作了),but...another问题:我如何才能准确地遍历每个存储桶一次(例如,为了找到最小和最大元素)。这次我不能使用nullptr (指针需要留在原来的位置--在存储桶上)
发布于 2015-06-14 21:26:15
只需反复使用你的擦除函数
while (size ())
{
erase(begin());
}发布于 2015-06-14 22:01:14
我在Hash类中使用了一个指针数组,这些指针指向来自类Bucket的Bucket。问题是在同一个存储桶上可能有多个指针。
我现在的问题是:有没有办法在不使用更多内存(布尔向量)的情况下知道存储桶是否已经被删除?
当然--使用引用计数。在Bucket类中放入一个整数成员变量,初始化为零。每当创建指向该Bucket对象的指针时,都会递增该整数。每当您使指向Bucket的指针无效时(例如,只要您想对该指针调用delete ),请递减整数成员变量。如果该递减导致整数变为零,则您知道Bucket不再有指向它的指针,因此删除该Bucket。
https://stackoverflow.com/questions/30829259
复制相似问题