我正在编写一个用C ++实现Dictionary(ADT)的作业。我最初在Xcode中编写程序,一切似乎都运行正常。然而,我最近发现平地机使用的是Visual Studio 2010,所以我试图确保我的代码在VS2010中也能正常工作....
我现在遇到的问题是在哈希表的remove()
函数中。基本上,我使用列表向量并迭代列表来删除碰撞条目。但是现在当我尝试测试这个remove()
函数时,我收到以下错误:debug assertion failed! expression list iterators incompatible
。我尝试在断言上查看Visual C ++文档,看起来它应该工作....有什么我可以忽略的吗?
这是我的代码:
///**DELETE***////
void remove(string key) {
size_t index = hashString(key);
list<Entry>& entry = table.at(index);
for(typename list<Entry>::iterator it = entry.begin();
it != entry.end();
/**/)
{
if (it->data == key) {
table[index].erase(it);
} else
it++;
}
//entry not found
cout << "Error: Cannot Delete... No Such Entry"<< endl;
}
答案 0 :(得分:2)
您怀疑是否忽略了erase
的返回值。如果您将包含erase
调用的行更改为此内容是否有效?
it = table[index].erase(it);
或者确实:
it = entry.erase(it);
请参阅此处list::erase
的文档: