c++ map容器使用注意事项
map容器迭代器
map容器迭代器使用erase会使当前迭代器失效,但erase函数会返回下一个迭代器。
通常我们使用迭代器遍历map时会使用类似以下形式`
for(auto i=map.begin();i!=map.end();i++)
{
//内容
}
一般情况下自然是没有问题的,但当你在其中使用erase删除某个元素时就会出问题了。
即便是
for(auto i=map.begin();i!=map.end();i++)
{
i=map.erase(i);//内容
i--;
}
包含了删除自减也会出问题,那就是当i同时为map.end()与map.begin()时,即数据全被你删完了。当你使用i–会直接报错,当你删除i–时编译器不会报错,但却会一直阻塞在i++这个语句,非常之坑。