【发布时间】:2019-10-19 02:42:02
【问题描述】:
我在一个数据结构类中,我们有一个关于哈希表的项目。我得到的指示摘录如下:
哈希表是一个指向结构
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指针类型的数组,对吗? - 当for循环遍历数组并创建一个新的
hash_table_entry结构体时,默认结构体变量是否自动设置为“Nil”?
提前感谢您的任何见解!
【问题讨论】:
-
如果您使用 C++(从使用
new可以看出),您应该使用std::vector而不是手动动态内存分配new。在 C++ 中没有值Nil。你的意思是NULL还是nullptr?你还没有展示hash_table_entry的定义,所以new hash_table_entry;是如何初始化的这个问题无法回答。而hash_table是hash_table_entry的数组,而不是hash_table_entry*(指向hash_table_entry的指针)。 -
@uneven_mark 我很想使用向量,但不幸的是,该项目的指导方针是我们只能使用 iostream、string 和 fstream 库。如果 C++ 中没有 NIL,我的意思一定是 NULL,老实说,在这个任务之前我从未听说过 NIL。我已经编辑了原始问题以包含“hash_table_entry”的定义
-
1.不,这不对; 2. 如果您真的尝试编译显示的代码,这甚至不会编译,正如您自己应该发现的那样。
-
@SamVarshavchik 感谢您的洞察力。我在 Notepad++ 中编写此代码并通过 SSH 使用 makefile 进行编译,因此在我的本地环境中没有编译器检查。如何使“hash_table”成为“hash_table_entry”指针数组?
-
@rclever2 您是说在编写代码时无法随时编译和运行代码吗?这不是一种可行的编程方式。在您的机器(GCC、Clang、MinGW 等)和 IDE 上安装任何 C++ 编译器,并在代码更改后使用它定期重新编译和测试。即使像使用godbolt.org 这样的东西也比根本无法编译代码要好。