vector和map都不能将it++写在for循环中,而在循环体内erase(it).
可以把it++卸载for循环中进行遍历操作,但erase操作后it发生了变化,如果for循环执行了++操作,会发生错误。
vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it),这时候for循环的++操作就会跳到删除元素的下下一个。
这是vector的内部机制所造成的,所以对vector进行erase的时候特别注意迭代器是否会失效!,因此vector不能直接erase(it++)此时it已经失效,++也迭代错误。
map则可以直接erase(it++);,也可以使用it= erase(it),这时候for循环的++操作也会跳到删除元素的下下一个。