gpt4 book ai didi

c++ - 在这个简单的哈希实现中**在做什么?

转载 作者:太空狗 更新时间:2023-10-29 23:41:49 24 4
gpt4 key购买 nike

我知道 * 定义了一个指针... ** 定义了一个指向指针的指针吗?

如果是,为什么?

指向指针的指针有时称为引用吗?只需要对以下非常简单的散列进行说明。

当传递整个内容的成本太高时,通常使用指针来传递较大结构的位置。

我看到了指向 quantlib 项目中用于创建“句柄”的指针的指针,因为每个“观察者”都持有一个指向“术语结构”指针的指针,该指针可能在运行时发生变化,因此该指针持有另一个指针。

但是我看不出这里有什么关联?

class hash_entry 
{
private:
int key;
int value;
public:
hash_entry(int key, int value)
{
this->key = key;
this->value = value;
}
int getKey()
{
return key;
}
int getValue()
{
return value;
}
};

class hash_map
{
private:
hash_entry **table;
static const int TABLE_SIZE = 128;
public:
hash_map()
{
table = new hash_entry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
int get(int key)
{
int hash = (key % TABLE_SIZE);
while (table[hash] != NULL && table[hash]->getKey() != key)
hash = (hash + 1) % TABLE_SIZE;
if (table[hash] == NULL)
return -1;
else
return table[hash]->getValue();
}
void put(int key, int value)
{
int hash = (key % TABLE_SIZE);
while (table[hash] != NULL && table[hash]->getKey() != key)
hash = (hash + 1) % TABLE_SIZE;
if (table[hash] != NULL)
delete table[hash];
table[hash] = new hash_entry(key, value);
}
~hash_map()
{
for (int i = 0; i < TABLE_SIZE; i++)
if (table[i] != NULL)
delete table[i];
delete[] table;
}
};

最佳答案

是的,** 定义了一个指向指针的指针(因为规范是这么说的)。不,我无法想象有人会称其为引用。

至于为什么他们在这种情况下使用它,他们正在编写(非常类似于 C)代码来动态分配指向 X 的指针数组。此代码:

 hash_entry **table;

[ ... ]

hash_map() {
table = new hash_entry*[TABLE_SIZE];

大致等同于:

std::vector<hash_entry *> table(TABLE_SIZE);

(尽管目前,我还没有按照类(class)成员的需要进行拆分)。

关于c++ - 在这个简单的哈希实现中**在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7811899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com