gpt4 book ai didi

c++ - 垃圾值被初始化为我的哈希表的值,即使我专门将所有索引编码为 -1

转载 作者:行者123 更新时间:2023-12-03 07:11:37 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why aren't variable-length arrays part of the C++ standard?

(13 个回答)


1年前关闭。




我不知道我是否遗漏了一些非常简单的东西,但是我无法将空哈希表的所有值初始化为 -1。我有另一个带有 ID 号的数组(我将对其进行哈希处理)。我将所有值初始化为 -1,因为我可以稍后检查我的哈希数组的值是否为 -1,然后我可以插入而无需二次探测。
在我的构造函数中,我初始化了表大小。然后我创建一个具有该大小的数组。然后我将我的私有(private)指针指向该数组,这样我就可以随时访问它。从那里,我初始化我的表......我对构造函数中的 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 替换类中的指针/数组混合。 .您将找到更多关于如何使用 std::vector 的信息,以及许多使用它们的示例,在您的 C++ 教科书中。

    关于c++ - 垃圾值被初始化为我的哈希表的值,即使我专门将所有索引编码为 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65053185/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com