在以下代碼中,cout語句(有時)會重複,而不退出if語句,並且不會在j ++中增加j。有時候循環的工作方式和預期的一樣(j ++對每個cout增加一次,語句退出)。我看過這個(看起來......),並不知道我做錯了什麼。有任何想法嗎?循環無故重複?
void SlipHash::outputHashTable() {
ios_base::fmtflags fmtflg = cout.flags();
const int size = min(nEntries, tableSize);
for (int i = 0, j = 0; j < size; i++) {
if (hashTable[i]) {
j++;
cout << left << setw(27) << "SlipHash::outputHashTable[" << dec << i << "] "
<< hex << hashTable[i] << endl;
}
}
cout.flags(fmtflg);
}; // void SlipHash::outputHashTable()
行爲不依賴於哈希表的內容嗎?如果它包含零,則不會打印,也不會增加'j'。代碼中'j'的功能是什麼? – Floris
當hashTable [i]爲false時,存在一條路徑,它不會增加'j'。這就是說,使用operator []重載這個可以解決幾乎任何事情。提供最少的代碼。 –
你怎麼知道它沒有遞增'j'打印?你能夠在調試器中重複該問題嗎? –