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做单独的更新
而上面的代码,不需要对头指针的更新做特别处理,上面用到了指针的指针,可以学习学习......