我在一个数据结构课程中,我们得到了一个有关哈希表的项目。我收到的指示摘录如下:
哈希表是指向结构
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 };
所以我的问题是:
hash_table
是hash_table_entry
类型指针的数组,对吗?hash_table_entry
结构时,默认结构变量是否自动设置为“ Nil
”?在此先感谢您的见解!
答案 0 :(得分:0)
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_entry
和new hash_table_entry[hash_table_size]
(创建对象或类型为hash_table_entry
的对象数组)都可以创建对象。因为这些表达式中没有给出初始化程序,所以对象是默认构造的。因为hash_table_entry
没有任何用户声明/定义的构造函数,所以这意味着将使用隐式定义的默认构造函数。此构造函数的确对hash_table_entry
的所有成员执行默认构造,这(因为它们是非类类型)意味着对它们不执行任何操作,因此成员的值将保持 indeterminate 初始化之后。
使用Nil
分配的含义是否值得怀疑。 Nil
在C ++中不存在,因此我假设是NULL
或nullptr
的意思,并且应该分配一个指针数组而不是对象,并使用空指针初始化它们
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}
它还将为您初始化所有指针为空指针,无需循环。