执行以下功能时发生错误: 我检查了迭代器,应该没问题,我认为问题应该是插入和擦除但我不知道如何解决它
void addNewUser(Records *record) {
if (mapUser.find(record->getUserName()) != mapUser.end())
cout << "User Name has been used already!!! " << endl;
else
mapUser.insert(pair<string, Records*>(record->getUserName(), record));
}
void deleteUser(string key) {
map<string, Records*>::iterator it = mapUser.find(key);
map<string, Records*>::iterator end = mapUser.end();
if (it != end) {
delete it->second;
it->second = NULL;
}
mapUser.erase(it);
}
主要:
int main() {
DataBaseOperation *a = new DataBaseOperation();
DataBaseOperation *a = new DataBaseOperation();
Records *r = new Records(10, 1, "Ben", "Ben Li");
Records *s = new Records(1, 1, "ken", "Ken Lee");
a->addNewUser(r);
a->deleteUser(s->getUserName());
a->displayAll();
delete a;
system("pause");
return 0;}
如果我在我的主函数中调用这样的函数:
a->displayAll();
cout << endl;
a->addNewUser(r);
cout << endl;
a->displayAll();
cout << endl;
a->deleteUser(s->getUserName());
a->displayAll();
但是如果我想单独调用函数(addNewUser和deleteUser)并且当我执行&#34; a-&gt; addNewUser(s);&#34;在主要情况下,会发生错误。
任何人都可以帮助我吗?
答案 0 :(得分:2)
仅当erase
指向实际元素(= it
)时,才应致电end
。
迭代器
pos
必须有效且可解除引用。因此end()
迭代器(有效但不可解除引用)不能用作pos
的值。
http://en.cppreference.com/w/cpp/container/map/erase
只需移动上方erase
内的if
即可。