【问题标题】:Why pointer to list create a 2D list structure为什么指向列表的指针创建一个二维列表结构
【发布时间】: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&lt;list&lt;int&gt;&gt;std::unique_ptr&lt;list&lt;int&gt;[]&gt;。或者在析构函数中释放数组;你不应该在你的代码中留下这个内存泄漏......

标签: c++ pointers stl


【解决方案1】:

我认为你应该学习指针的工作原理。

您在 Initializer 中创建的列表有“大小”。

table[0], table[1] ...所有这些都是列表。

想想int的情况。

int* table = new int[size];

table[0], table[1] 这些都是int。

list<int>* table = new list<int>[size];

那么table[0]、table[1]都是list。

列表是一维结构。你用一维结构制作一维结构。

然后是二维结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多