C ++打印数组

时间:2016-12-02 10:10:28

标签: c++ hash cout

我正在使用C ++进行线性和二次探测哈希表实现。在Hash.cpp中,我有一个工作的linearProb(int key)和quadProb函数。如果我通过main.hpp单独调用它们,它会打印出正确的哈希表,但是我希望在编译时看到线性表和二次表的结果。

这是我的linearProb(quadProb看起来很相似)

void Hash::linearProb(int key){

    int i, count = 0;
    Hash h;

   //if it is empty, place it there
   if (a[key % tableSize] == -1)
    a[key % tableSize] = key;

   else{
       i = 0;

       //until finding an empty slot, but don't loop around
       while (i < tableSize && a[i] != -1){
                count++;
                i++;
       }

       if(count == tableSize){
           cout<<key<<" could not be inserted in the table\n";
           exit(1);
       }
       //when there's a collision increase i by 1 until finding empty slot
       for(i = (key % tableSize+1) % tableSize; i <tableSize; i++){
           if(a[i] == -1){
               a[i] = key;
               break;
           }
       }
   }
}

我在Hash.cpp中也有print()

void Hash::print(){
    int i;

    //cout<<"Hash Table with Linear Probing"<<endl;
    cout<<"\n Result Hash Table: "<<endl;

    for(i = 0; i < tableSize; i++){
        cout<<"\n"<<i;
        if(a[i] != -1){
        cout<<" "<< a[i];
        }
    }
    cout<<"\n";
}

如果我在main.cpp中调用它,就像这样

int main(){
    int key;
    Hash h;

    //take in .txt file
    std::fstream file;
    file.open("keys.txt");

    while(!file.eof()){
        file >> key;

        if(key != -1){
        h.linearProb(key);
        //h.quadProb(key);
        }
    }

    file.close();

    if(key == -1){
        h.print();
    }
}

我可以看到我的探测工作,但请注意我注释了quadProb以测试linearProb。我想同时打印出两张桌子。为了做到这一点,我试图在每个探测函数中调用print()而不是从main调用它。

这就是我尝试过的。我将main()更改为

while(!file.eof()){
    file >> key;

    h.linearProb(key);
    //h.quadProb(key);        
}

file.close();

并添加到linearProb(int key)

void Hash::linearProb(int key){
    int i, count = 0;
    Hash h;

    if(key == -1){
        h.print();
        exit(1);
    }
}

但这只打印出0~9而没有[i]。当我在进入print()时测试了[i]是什么,并且它给了我所有i值的[i]为-1,这导致不打印任何东西。我真的很困惑为什么会这样。为什么print()没有得到正确的[i],即使它通过main调用print()时也能正常工作?

1 个答案:

答案 0 :(得分:2)

在你的&#34;打印探针功能&#34;中,打印在函数中声明的空哈希h。您应该放弃Hash h;,只需拨打print()而不是h.print()

这是调试器可以帮助您的一个很好的问题。当在该分支中断时,它将显示空的h,而在main中,h将被填充。