Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我有一个指向自定义项的未初始化指针表,我想检查是否已经存在某些自定义项_C++_Arrays_Pointers_Hashtable - Fatal编程技术网

C++ 我有一个指向自定义项的未初始化指针表,我想检查是否已经存在某些自定义项

C++ 我有一个指向自定义项的未初始化指针表,我想检查是否已经存在某些自定义项,c++,arrays,pointers,hashtable,C++,Arrays,Pointers,Hashtable,我的函数通过访问由散列函数决定的索引来查看指针向量 如果所说的数组是指C数组,那么必须将每个索引初始化为某种“空/默认”值。程序无法将未初始化的随机位序列与插入其中的某个值区分开来,甚至尝试读取未初始化的数据也是未定义的行为 不管怎样,您都需要某种“簿记”机制来判断数组中的哪些元素被占用。最简单的方法是将数组初始化为零,或者将数组中的每个值初始化为某个默认值。但请注意,如果将数组初始化为零,则无法区分“空”插槽和插入nullptr的位置。您可能想考虑每个元素都是一个更复杂的聚合对象,其中包含关于

我的函数通过访问由散列函数决定的索引来查看指针向量

如果所说的数组是指C数组,那么必须将每个索引初始化为某种“空/默认”值。程序无法将未初始化的随机位序列与插入其中的某个值区分开来,甚至尝试读取未初始化的数据也是未定义的行为

不管怎样,您都需要某种“簿记”机制来判断数组中的哪些元素被占用。最简单的方法是将数组初始化为零,或者将数组中的每个值初始化为某个默认值。但请注意,如果将数组初始化为零,则无法区分“空”插槽和插入
nullptr
的位置。您可能想考虑每个元素都是一个更复杂的聚合对象,其中包含关于该单元是否被占用/空/什么的信息。通常,哈希表由“bucket”元素组成,其中包含实际的键/值对,以及元数据,如链接到冲突解决的其他bucket的链表,或者如果使用某种开放寻址冲突解决方案,则由一些元数据组成,这些元数据将该元素标记为已占用/空闲/等


您还可以考虑使用<代码> STD::unOrdEdEdMult,或者在插入更多元素时增长的哈希表实现,如果在这个特定的作业分配之外,这将成为您的选择。

< P>您有2种方法将哈希表数组初始化为NULL。

  • 在声明期间,例如:“type”

    但是,这个在Xcode中不起作用。幸运的是,还有另一种方法

  • 哈希表
    类的构造函数中,使用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;