Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可扩展散列-析构函数C++_C++_Hash - Fatal编程技术网

可扩展散列-析构函数C++

可扩展散列-析构函数C++,c++,hash,C++,Hash,所以。。。我已经实现了一个版本的exendible哈希…我现在的问题是关于析构函数 我在Hash类中使用了指向Bucket类中的Bucket的指针数组。问题是同一个bucket上可能有多个指针 在Hash类的析构函数中,我必须删除每个bucket,然后是数组,但是我必须小心不要删除同一个bucket两次,我认为这会导致错误。为了做到这一点,我使用bool向量来记忆bucket是否已经被删除 我现在的问题是:有没有一种方法可以知道一个bucket是否已经被删除,而不使用bool向量中更多的内存 乐

所以。。。我已经实现了一个版本的exendible哈希…我现在的问题是关于析构函数

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

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

我现在的问题是:有没有一种方法可以知道一个bucket是否已经被删除,而不使用bool向量中更多的内存


乐:我用nullptr解决了析构函数的问题,现在似乎可以工作了,但是…另一个问题:例如,我如何在每个bucket中精确地查找一次min和max元素。这次我不能使用nullptr,指针需要保持在原来的位置-在bucket上

只需迭代使用擦除函数

while (size ())
{
    erase(begin());
}
我在Hash类中使用了指向bucket的指针数组 从类桶。问题是在上可能有多个指针 同样的桶

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


当然-使用引用计数。在Bucket类中放入一个初始化为零的整数成员变量。每当创建指向该Bucket对象的指针时,递增整数。每当您使指向Bucket的指针无效时,即当您在该指针上调用delete时,递减integer成员变量。如果这个减量导致整数变为零,你知道桶没有指针指向它,所以删除桶。< /P>也许考虑使用STD::SyrdypTR?每个对象使用2-3个字的内存加上共享状态,但为了简单和安全,这通常是一个很好的折衷方案。在正常操作过程中,您会遇到同样的问题。谢谢你的快速回复…好吧,这是大学的一个项目,我不被允许使用std::shared_ptr…这是什么意思?我有删除指针[I]。。。其中指针[i]是指针之一。但是如果我删除了它,然后稍后让我们说指针[j],其中j>我必须再次删除它,我不能再删除它,因为我已经删除了它,指针[j]指向不再存在的东西。我只是想我应该删除这个bucket,然后将该bucket上显示的所有指针设置为NULL。这是个好主意吗?还有一个问题。。。我怎么能用谷歌翻译浏览翻译的呢对不起,如果是错误的动词:D每个bucket正好一次查找最小和最大元素,例如,在你编写destructor之前,删除所有东西,找出一个擦除函数来删除一个好主意…但是使用nullptr似乎更容易:D…显然它工作正常