c++ - 数组元素从未成功添加? (C++)

标签 c++ hashtable stdarray

我是 C++ 的新手。我尝试实现一个非常简单的哈希表,然后我想看看我的哈希算法是否将元素放在了正确的位置。但是,显然该元素甚至根本没有添加到数组中:

void add(string str, array<string, 2000> data) {
    int i = makeHash(str) % data.size();

    while (data[i++ % data.size()].compare("") != 0)
        continue;

    data[i % data.size()] = str;
    cout << "Added!"; // successfully prints, meaning str was added to data
}

int main() {

    array<string, 2000> data;
    string str = "The quick brown fox something something";
    add(str, data);

    for (int i = 0; i < data.size(); i++)
        if (data[i].compare(str) == 0)
            cout << i; // never prints... so str was never added to data?

    return 0;
}

最佳答案

您需要传递data 变量作为引用 -

void add(string str, array<string, 2000> &data)

你在这里做的是按值传递,所以一旦你的函数结束,data 的值就会被销毁。

关于c++ - 数组元素从未成功添加? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307016/

相关文章:

c++ - 从另一个 constexpr std::array 初始化没有默认构造函数的对象的 std::array

C++ 模板 : call whichever function matches between 2 choices

c++ - 不使用 readyRead() 信号从 QTcpSocket 读取

c++ - 使用 kbhit() 暂停终端输出?

swift - 引用作为 swift 字典中的键

c# - 是否有任何通用版本的哈希表?

c++ - 遍历矩阵的方法

data-structures - 找到接近结果的哈希

c++ - 当第二个依赖于第一个时,如何在构造函数初始值设定项列表中初始化两个 std::array

c++ - 将 const float* 转换为 std::array<float, ...>