c++ - 垃圾值被初始化为我的哈希表的值,即使我专门将所有索引编码为 -1
问题描述
我不知道我是否遗漏了一些非常简单的东西,但是我无法将空哈希表的所有值初始化为 -1。我有另一个带有 ID 号的数组(我将对其进行哈希处理)。我将所有值初始化为 -1,因为我可以稍后检查我的哈希数组的值是否为 -1,然后我可以插入而无需二次探测。
在我的构造函数中,我初始化了表大小。然后我创建一个具有该大小的数组。然后我将我的私有指针指向该数组,这样我就可以随时访问它。从那里,我初始化我的表......我对构造函数中的 for 循环有疑问:
- 我做 arr[i] = -1 还是 table[i] = -1 有关系吗?因为 table 指向所有索引,对吗?并且 arr[] 显然可以访问它自己的索引。所以我不明白为什么这两种方式都很重要。
如果有人能启发我,那就太好了。谢谢。
HashTable::HashTable(int bsize)
{
this->tableSize= bsize;
int arr[bsize]; //creating an array to hold hash values
table = arr; //table pointer points to our new array
for(int i = 0; i < bsize; i++){
table[i] = -1;
}
}
void HashTable:: printTable(){
for(int i = 0; i < tableSize; i++){
cout << table[i] << endl;
}
}
这是我的课
class HashTable
{
int tableSize = 40009; // No. of buckets
// Pointer to an array containing buckets
int *table;
int numOfcolision =0;
public:
HashTable(int bsize); // Constructor
// inserts a key into hash table
bool insert(int key);
// hash function to map values to key
unsigned int hashFunction(int key);
void printTable();
int getNumOfCollision();
int search(int key);
};
解决方案
在您的构造函数中:
int arr[bsize]; //creating an array to hold hash values
这是非标准的 C++。可变长度数组不是标准 C++。在标准 C++ 中,所有数组大小都是常数,在编译时而不是运行时确定。但是,更重要的是,这是构造函数中的局部变量。
table = arr; //table pointer points to our new array
table
大概是一个指针类成员。这将类成员初始化为指向构造函数中的本地数组。
但是一旦构造函数返回,数组就会被销毁,就像所有其他在声明它们的地方函数的局部变量一样。在类成员中使用指针成为未定义的行为,对您来说,这表现为随机垃圾。
在 C++ 中,数组不是这样工作的。您需要将类中的指针/数组混合替换为std::vector
. 您将在您的 C++ 教科书中找到有关如何使用 的更多信息std::vector
以及许多使用它们的示例。
推荐阅读
- powershell - 需要在客户端上安装 Alien Vault,但客户端窗口机器运行 PowerShell 2.0。需要转换为适用于该机器的语法
- rust - Substrate Kitties:模块未显示为外部
- ajax - 为什么我的 ajax 查询只保存最后一个值
- python - 通过平均对 Python 中的 numpy 图像数组进行下采样
- reactjs - 为什么我不能将响应数据传递给 redux 存储
- c++ - 用于测试目标的具有不同源文件夹的 Makefile
- python - 我正在尝试用python制作游戏,首先让角色移动,但我一直收到同样的错误
- sql - SQL Server 2019 数据库中 ID、文件组和文件的命名约定
- c++ - 为什么这个 lambda 模棱两可?
- ssas - 为什么要使用 Process Data 与 Process Full 来处理分区