【发布时间】:2014-04-07 02:21:53
【问题描述】:
我试图使问题标题尽可能具有描述性,这样您就不必单击问题来确定您是否对我的问题有答案。
我正在为课堂作业实施chaining hash table,我得出的结论是vector 最适合我的项目。
考虑下面的sn-p代码:
struct node
{
public:
node(string key, node * next = NULL)
{
this->key = key;
this->next = next;
}
string key;
node * next;
};
class htable
{
private:
static const int TABLE_SIZE = 100;
vector <node*> table;
public:
htable()
{
table.resize(TABLE_SIZE);
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
~htable()
{
table.erase(table.begin(), table.begin() + TABLE_SIZE);
}
};
我的htable 类destructor 中的erase 函数会执行正确的内存管理吗?
【问题讨论】:
-
为什么要为链表设计
node,却用vector实现? -
在我看来,在实现哈希表时,您只需要两个向量即可。第一个向量包含项目(键、值、哈希、其他项目的索引以进行链接),另一个向量基本上是散列表。唯一重要的技巧是,当您从 items 向量中删除一个项目时,而不是简单地删除它并将所有较高索引的项目移动到较低的索引,您只需将 items 向量的最后一项移动到已删除项目的位置,然后您修复了链接索引。无需到处分配节点...
标签: c++ memory-management vector