void remove(const Key& key) { Entry **entry_ptr = &m_buckets[key.hash() % m_num_buckets]; while ((*entry_ptr != 0) && !(key == (*entry_ptr)->m_key)) { entry_ptr = &(*entry_ptr)->m_next; } if (*entry_ptr != 0) { Entry *tmp_ptr = (*entry_ptr)->m_next; delete *entry_ptr; *entry_ptr = tmp_ptr; }
这段代码看了半天,原因是和自己以前实现的想法不一样;
以前的做法是delete掉查找到的节点,然后更新指针,但是首指针在m_buckets中,要对m_buckets做单独的更新
而上面的代码,不需要对头指针的更新做特别处理,上面用到了指针的指针,可以学习学习......