hashnode构造函数如何初始化

时间:2016-03-30 08:17:37

标签: c++ constructor

我正在尝试使用单独链接实现散列。虽然我们只是为类hashnode构造对象,但我无法理解hashmap构造函数是如何初始化的。它们都是彼此私密的,而且我还没有从hashmap派生出hashnode课。那怎么办?

#include <iostream>
using namespace std;
static const int table_size = 10;
class hashnode {
        public:
            int key;
            int value;
            hashnode* next;

            hashnode(int key, int value)
            {
                this->key = key;
                this->value = value;
                this->next = NULL;
            }

};

class hashmap {
    hashnode** table;
public:
    hashmap()
    {
        table = new hashnode* [table_size];
        for(int i=0;i<table_size;i++)
        {
            table[i] = NULL; 
        }
    }

    int hash(int key)
    {
        return key%table_size;
    }

    void insert(int key, int value)
    {
        int hash_val = hash(key);
        hashnode* prev = NULL;
        hashnode* entry = table[hash_val];

        while(entry != NULL)
        {
            prev = entry;
            entry = entry->next;
        }

        if(entry == NULL)
        {
            entry = new hashnode(key,value);
            if(prev == NULL)
            {
                table[hash_val] = entry;
            }
            else
            {
                prev->next = entry;
            }
        }
        else
        {
            entry->value = value;
        }
    }

    void printtable(int key)
    {
         while(table[0] != NULL)
         {
            cout<<table[0]->key<<endl;
            table[0] = table[0]->next;
         }
    }  
};

int main()
{
hashmap hash1;
int key,value;
int choice;

1 个答案:

答案 0 :(得分:0)

table = new hashnode* [table_size]; 行是,正在调用hashnode的构造函数。这是new的作用;它为每个对象分配空间,然后调用对象的构造函数。

您要求编译器创建10个(基于table_sizehashnode个对象。