我們(全部)知道,通過迭代器刪除元素,指針無效迭代器,例如:用std :: map :: begin調用std :: map :: erase是否安全?
std::map<..> map_;
std::map<..>::iterator iter;
// ..
map_.erase(iter); // this will invalidate `iter`.
但是,這個:
map_.erase(map_.begin());
是這樣安全嗎? map_.begin()
將是一個有效的迭代器,指向映射的(新)第一個元素?
「測試它」不是一個解決方案。
啊哈,看起來像這樣是我(不知何故)失蹤:「begin()不是一個迭代器,但返回一個迭代器」。 –