gpt4 book ai didi

c++ - Array of list,插入一个字符串的行为很奇怪

转载 作者:行者123 更新时间:2023-11-28 07:16:27 25 4
gpt4 key购买 nike

我想使用 string 类型的列表数组制作不同类型的哈希表。因此,我创建了:

list<string> hashtableFold[arraysize];
list<string> hashtableSelect[arraysize];

在散列函数中,计算position,然后传递给一个非常简单的插入函数:

Hash::insert(Hash::hashtableFold, position, contents);

其中的代码是:

void Hash::insert(list<string> whichList[arraysize], int pos, string contents) {
whichList[pos].push_back(str);

但是,如果我打印 hashtableFold(使用以下代码),该表是空的 :(。

void Hash::print(list<string> whichList[arraysize]) {
//loop over array
for (int i = 0; i < arraysize; i++) {
cout << i << ": ";
list<string>::iterator k;
//loop over list
if (whichList[i].empty()) {
cout << "empty";
} // if
else for (k = whichList[i].begin(); k != whichList[i].end(); k++)
cout << *k << " | ";
cout << endl;
} // for
}

这里出了什么问题?

有兴趣的,这里是完整的源代码:https://dl.dropboxusercontent.com/u/9844620/ds4.zip

最佳答案

问题是你有两个哈希表,这里是你代码的相关摘录和注释

class DigitFold : public Hash // every DigitFold has its own hash table
{
};

int main()
{
Hash hash; // first hash table
DigitFold df; // contains second hash table

setInput(stream);
df.fold(stream);

hash.print(hash.hashtableFold);
}

如果您查看 DigitFold::fold 的代码,您会看到它将项目添加到它自己的哈希表(第二个哈希表)中,但是您打印出声明在main 的第一行(第一个哈希表)。该哈希表未添加任何内容。

将最后一行改为

df.print(df.hashtableFold);

这可能有效(假设没有其他错误)。

但确实代码有点困惑,你需要重新考虑DigitFoldHash之间的关系,并重新设计Hashinsertprint 方法不应将 Hash 对象的内部作为参数。由于它们是 Hash 的方法,因此它们已经可以访问这些方法,因此将它们作为参数只会让人感到困惑。

关于c++ - Array of list<string>,插入一个字符串的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20163591/

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