一个简单的C++程序,第二种情况出现错误。

void func(forward_list &lst, string s1, string s2)
{
auto current = lst.begin();
auto prev = lst.before_begin();
while (*current != s1 && current != lst.end())
prev = current++;
if (current != lst.end())
lst.insert_after(current, s2);
else
lst.insert_after(prev,s2);
}
第一中情况无差错,第二种情况出现forward_list iterator not dereferencable的提示,我
的原意是用prev存储指向最后一个元素的迭代器。

此题由我自己回答吧,楼上全答错了。while循环的判断条件中当current到达end()后对end()进行了取值操作,因此引发错误。

为什么会有list iterator not dereferencable 这个错误?
http://zhidao.baidu.com/link?url=o1fsggWw7Z0pykNMHdgwgIhrP8GAWfIO8-9PqB941GqOw1ycoFRsT28V9WogB0yn3-dBvnIEt_xEDAJlkX8oU_

如何避免“iterator not incrementable”错误

http://blog.csdn.net/hsujouchen/article/details/8987233

很简单,不能在迭代器迭代的过程中添加删除元素,不然迭代器的状态就不正确了。
一个简单的技巧就是如果你要插入元素或者删除元素,就从后往前迭代。

很简单,不能在迭代器迭代的过程中添加删除元素,不然迭代器的状态就不正确了。
一个简单的技巧就是如果你要插入元素或者删除元素,就从后往前迭代。

在迭代器迭代过程添加删除元素,这种做法是有问题的。

不能迭代过程中添加删除元素

不能在迭代器迭代的过程中添加删除元素

可以,在修改前用temp的临时迭代器,保存,修改完了以后,再用temp修复迭代器

可以,在修改前用temp的临时迭代器,保存,修改完了以后,再用temp修复迭代器

迭代过程中,,,不能添加或删除元素