gpt4 book ai didi

C++11 基于数组的哈希 : Auto not looping

转载 作者:行者123 更新时间:2023-11-30 05:40:52 25 4
gpt4 key购买 nike

请注意这是家庭作业,但我们允许并鼓励我们寻求帮助,因为我们的单一教授没有时间回复所有学生。如果您因为以下原因不想提供帮助这个问题的作业性质,请不要回答而不是标记为寻求帮助。我不想让我的家庭作业为我完成。我只是想帮助了解我的错误所在。感谢所有帮助!

我正在处理基于数组的哈希表。我在散列中有一些值,我想检查散列中所有元素的长度总和。哈希中的元素是字符串。

我正在使用以下代码遍历每个在散列中有值的成员...

for (auto iter : myHash) {
//count up the length of all the strings
countOfItems += iter.length();
cout << iter << " ";
}

问题是代码永远不会循环——一次也没有。它永远不会达到 countOfItems += iter.length();

我调试了问题并尽我所能进入我的迭代器,但仍然迷路了。我将在这里发布迭代器...

template <typename KEY, typename VALUE>
arrayHashIterator<KEY, VALUE> arrayHashTable<KEY, VALUE>::begin() const {

arrayHashIterator<KEY, VALUE> temp;
temp.keyArray = this->keyArray;
temp.valueArray = this->valueArray;
temp.statusArray = this->statusArray;
temp.index = 0;
temp.arraySize = this->arraySize;
temp.offTheRightEdge = false;

if (temp.statusArray[0] != 1) {
//Go search for the first index that contains useful data
++temp;
}
return temp;
}

当代码到达重载的++ 运算符时,它会转到另一个类...

template <typename KEY, typename VALUE>
arrayHashIterator<KEY, VALUE> arrayHashIterator<KEY, VALUE>::operator++() {

for(index; index < arraySize; index++){
if(statusArray[index] == 1)
{
offTheRightEdge = false;
return *this;
}
}
offTheRightEdge = true;
return *this;
}

现在,当我调试并逐步执行代码时,它正确地到达重载的++ 运算符,然后找到第一个存储值的索引,然后将该 arrayHashIterator 对象返回给 begin(),begin() 又将其返回。我希望它随后会有一些东西进入 (Auto iter: Hash) 循环,但它没有。

我确实有一个用于 arrayHashIterator 类的重载 * 运算符,如下所述...

template <typename KEY, typename VALUE>
VALUE& arrayHashIterator<KEY, VALUE>::operator*() const{

if(offTheRightEdge == true){
throw Error();
}
return valueArray[index];
}

我几乎是肯定的我已经将元素正确地输入到我的哈希中,因为如果我在调试器中打开我的数组以获取值以及键和状态,我会发现所有信息都以正确的形式出现在正确的位置。

我只是不知道为什么 (auto iter : hash) 会循环失败。我确实相信问题出在我的重载++ 或重载 * 运算符中,但我不能这么确定。

在此问题上的第二双眼睛将不胜感激。我不想要一些即时答案的有效代码,我只是希望能帮助您找到错误以及我如何解决它!

编辑:哈希表和每个用例的检查有更多代码,但我想将特定部分发布到我的问题所在。我可以根据要求详细说明提供的代码。

编辑:这是我的 end() 方法以及重载的 != 运算符...

更新:重载!=

template <typename KEY, typename VALUE>
bool arrayHashIterator<KEY, VALUE>::operator!=(const arrayHashIterator<KEY, VALUE>& right) const {
//TODO: see if the "this" iterator and the right iterator are not equal.
//To do this, check both iterators' index values and offTheRightEdge values
if(this->offTheRightEdge != right.offTheRightEdge || this->index != right.index) {
return true;
} else {
return false;
}
}

结束()

template <typename KEY, typename VALUE>
arrayHashIterator<KEY, VALUE> arrayHashTable<KEY, VALUE>::end() const {

arrayHashIterator<KEY, VALUE> temp;
temp.keyArray = this->keyArray;
temp.valueArray = this->valueArray;
temp.statusArray = this->statusArray;
temp.index = this->arraySize;
temp.arraySize = this->arraySize;
temp.offTheRightEdge = true;

return temp;
}

最佳答案

看起来你的 operator != 实际上是一个 operator ==。在调试器中检查它。

关于C++11 基于数组的哈希 : Auto not looping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372772/

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