迭代器是否失效?

时间:2010-06-06 12:45:28

标签: c++ iterator

迭代器在以下情况后失效:

string b "Some string";
auto beg_ = b.begin();
auto end_ = b.end();
b.erase(beg_);

4 个答案:

答案 0 :(得分:5)

是的,但是erase会返回一个有效的迭代器,你可以用它继续循环:

  

对于其余成员,   function返回member的迭代器   type string :: iterator引用   现在占据的角色   第一个角色的位置   擦除,或者,如果没有这样的字符   存在,返回end()。

来源:http://www.cplusplus.com/reference/string/string/erase/

答案 1 :(得分:1)

是的,标准说

  

引用basic_string序列元素的引用,指针和迭代器可能无效   通过basic_string对象的以下用法:

     
      
  • 调用非const成员函数,operator[]()at()begin()rbegin()end()rend()除外。
  •   

答案 2 :(得分:1)

http://www.sgi.com/tech/stl/basic_string.html

  

迭代可能会使迭代器失效,   保留,插入和擦除(以及通过   功能相当于   插入和/或擦除,如清除,   调整大小,追加和替换)。   另外,第一次通话   任何非const成员函数,   包括非const版本的   begin()或operator []可能会失效   迭代器。

答案 3 :(得分:1)

据我所知,是的。 擦除和插入操作使迭代器无效。

但是erase(迭代器)也会返回一个你可以使用的迭代器。