【发布时间】:2021-09-03 17:12:55
【问题描述】:
我正在尝试实现一个哈希表。我知道list<int> *table 是一个指向列表(条目)的指针,并且在构造函数中,我初始化了列表的大小(表示有多少条目)。
我很好奇为什么这可以是list(2D list)结构的list,为什么我可以执行
table[key].push_back(...);
谢谢
class HashTable {
private:
int size;
list<int> *table;
public:
HashTable(int size);
int hashFuntion(int x) {
return x % size;
};
void insertItem(int x);
};
HashTable::HashTable(int size) {
this->size = size;
table = new list<int>[size];
}
void HashTable::insertItem(int x) {
int key = hashFuntion(x);
table[key].push_back(x);
}
【问题讨论】:
-
它不是列表的列表,而是列表的数组。列表不擅长随机访问(如
table[key])。 -
@MikeCAT 谢谢指出,但是为什么这会变成一个列表数组呢?是“table = new list
[size]”创建列表数组吗? -
为什么?通过指向第一个元素的指针来表示数组是语言设计的原因。我建议使用
std::vector<list<int>>或std::unique_ptr<list<int>[]>。或者在析构函数中释放数组;你不应该在你的代码中留下这个内存泄漏......