C++ 我有一个指向自定义项的未初始化指针表,我想检查是否已经存在某些自定义项
我的函数通过访问由散列函数决定的索引来查看指针向量 如果所说的数组是指C数组,那么必须将每个索引初始化为某种“空/默认”值。程序无法将未初始化的随机位序列与插入其中的某个值区分开来,甚至尝试读取未初始化的数据也是未定义的行为 不管怎样,您都需要某种“簿记”机制来判断数组中的哪些元素被占用。最简单的方法是将数组初始化为零,或者将数组中的每个值初始化为某个默认值。但请注意,如果将数组初始化为零,则无法区分“空”插槽和插入C++ 我有一个指向自定义项的未初始化指针表,我想检查是否已经存在某些自定义项,c++,arrays,pointers,hashtable,C++,Arrays,Pointers,Hashtable,我的函数通过访问由散列函数决定的索引来查看指针向量 如果所说的数组是指C数组,那么必须将每个索引初始化为某种“空/默认”值。程序无法将未初始化的随机位序列与插入其中的某个值区分开来,甚至尝试读取未初始化的数据也是未定义的行为 不管怎样,您都需要某种“簿记”机制来判断数组中的哪些元素被占用。最简单的方法是将数组初始化为零,或者将数组中的每个值初始化为某个默认值。但请注意,如果将数组初始化为零,则无法区分“空”插槽和插入nullptr的位置。您可能想考虑每个元素都是一个更复杂的聚合对象,其中包含关于
nullptr
的位置。您可能想考虑每个元素都是一个更复杂的聚合对象,其中包含关于该单元是否被占用/空/什么的信息。通常,哈希表由“bucket”元素组成,其中包含实际的键/值对,以及元数据,如链接到冲突解决的其他bucket的链表,或者如果使用某种开放寻址冲突解决方案,则由一些元数据组成,这些元数据将该元素标记为已占用/空闲/等
您还可以考虑使用<代码> STD::unOrdEdEdMult,或者在插入更多元素时增长的哈希表实现,如果在这个特定的作业分配之外,这将成为您的选择。
< P>您有2种方法将哈希表数组初始化为NULL。哈希表
类的构造函数中,使用for循环:
for(int i = 0 ; i < hashTable.size() ; i++)
hashTable[i] = NULL;
for(int i=0;i
一条建议:尝试为您的
哈希表
类和哈希表
数组指定不同的名称。您是否测量了将指针初始化为null所用的时间并确定它太长?考虑一个数组:<代码> UnQuyPPTR <代码>,将其自动设置为空值。通过const引用传递密钥。仅仅使用<代码> STD::unOrdEdEdMult不是更简单吗?我还没有测量初始化到0所花费的时间,尽管我会考虑它。为什么要通过常量引用传递密钥?您所拥有的有什么不起作用?只要对每个索引将hashTable
初始化为nullptr
,就可以了。这是家庭作业,我需要使用hashTable
for(int i = 0 ; i < hashTable.size() ; i++)
hashTable[i] = NULL;