在 C++ 中使用迭代器从地图中删除项目
Using iterator for removing items from map in c++
map<int, int> m_map;
// ...
map::iterator it = m_map.begin();
while (it != m_map.end())
{
m_map.erase(it++);
}
++
动作何时发生?是在 erase
之前还是之后?什么时候这样做才安全?
我认为没有指定 ++
是在调用 erase
之前还是之后发生。尽管如此,即使它保证在调用之前执行,您不得不询问的事实表明代码是错误的。有更好、100% 安全的选择:
while (it != m_map.end())
{
it = m_map.erase(it);
}
erase
returns 指向已删除元素之后的元素的迭代器。
map<int, int> m_map;
// ...
map::iterator it = m_map.begin();
while (it != m_map.end())
{
m_map.erase(it++);
}
++
动作何时发生?是在 erase
之前还是之后?什么时候这样做才安全?
我认为没有指定 ++
是在调用 erase
之前还是之后发生。尽管如此,即使它保证在调用之前执行,您不得不询问的事实表明代码是错误的。有更好、100% 安全的选择:
while (it != m_map.end())
{
it = m_map.erase(it);
}
erase
returns 指向已删除元素之后的元素的迭代器。