我是否正确设置了此哈希表?

Am I Setting up this Hash Table Correctly?

本文关键字:哈希表 设置 是否      更新时间:2023-10-16

我在一个数据结构类中,我们得到了一个关于哈希表的项目。我得到的指示摘录如下:

哈希表是指向结构hash_table_entry的指针数组 全部初始化为Nil

所以这就是我写的(再次,整个程序的摘录(:

hash_table_entry *hash_table = new hash_table_entry[hash_table_size];
for (int i=0;i<hash_table_size;i++)
{
hash_table[i] = new hash_table_entry;
}

hash_table_entry是:

struct hash_table_entry{
char event_id; // Event id -- key used to hash on
int year; // Year of storm event
int event_index; // For the given year, the index into array of storm events };

所以我的问题是:

  1. hash_tablehash_table_entry指针类型的数组,对吗?
  2. 当 for 循环穿过数组并创建新的hash_table_entry结构时,默认结构变量是否自动设置为"Nil"?

提前感谢您的任何见解!

hash_table是

指针类型的数组hash_table_entry对吗?

不,hash_table指向hash_table_entry的指针,在给定的new hash_table_entry[hash_table_size];初始化后,它将指向(第一个元素(hash_table_entry数组(不是数组到指向hash_table_entry的指针(。

当 for 循环穿过数组并创建新的hash_table_entry结构时,默认结构变量是否自动设置为"Nil"?

如评论中所述,作业

hash_table[i] = new hash_table_entry;

由于类型不匹配,无法编译。hash_table[i]的类型为hash_table_entry,而new hash_table_entry的类型为hash_table_entry*

但除此之外,对于初始化问题:new hash_table_entrynew hash_table_entry[hash_table_size](都创建对象或类型为hash_table_entry的对象数组(创建对象。由于这些表达式中没有给出初始值设定项,因此对象是默认构造的。由于hash_table_entry没有任何用户声明/定义的构造函数,这意味着将使用隐式定义的默认构造函数。这个构造函数确实对hash_table_entry的所有成员执行默认构造,这(因为它们是非类类型(意味着对它们不做任何事情,因此成员的值在初始化后将保持不确定

这是否是Nil任务的含义是值得怀疑的。Nil不是C++中存在的东西,所以我假设NULLnullptr的意思是,你应该分配一个指针数组而不是对象,并使用空指针初始化它们。

指向hash_table_entry的指针数组分配了new hash_table_entry*[hash_table_size],这会导致hash_table_entry**,而不是hash_table_entry*。如果按如下所示添加{}

new hash_table_entry*[hash_table_size]{}

或更明确

new hash_table_entry*[hash_table_size]{nullptr}

它还将为您初始化指向空指针的所有指针,无需循环。