stl中map的erase的正确使用

  STL中map的erase方法用来从一个map中删除掉指定的节点,例如




  上面这种写法只是删除单个节点,map不会出现任何问题,但是当在一个循环里用的时,往往会被误用,那是因为使用者没有正确理解iterator的概念。
 
  像下面这样的一个例子就是错误的写法:




  这是一种错误的写法,会导致程序行为不可知。其原因是map是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。

 

  正确的使用方法如下:

  1. 使用删除之前的迭代器定位下一个元素,STL建议的使用方式





  2. erase() 成员函数返回下一个元素的迭代器





  需要注意的是,在实践中我们发现方法1无法在Linux下编译,而不管在Linux还是Windows下,vector,list都有方法iterator erase( iterator _Where ),但是在Linux下map中没有该方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注