1

我对 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;
}
4

2 回答 2

3

您需要将data变量作为参考传递 -

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

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

于 2014-04-26T05:31:25.203 回答
1

尝试通过引用传递数据,即

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

按值传递意味着将数据的副本传递到函数中。此外,还有一个错误。我确定你想要:

data[(i-1) % data.size()] = str;

因为i当您退出 while 循环时仍会递增。

于 2014-04-26T05:41:50.477 回答