【发布时间】:2013-06-24 11:48:24
【问题描述】:
在以下循环中,我使用的是预先计算的结束迭代器:
std::list::iterator end = MyList.end();
for (std::list::iterator it = MyList.begin(); it != end ;)
it = MyList.erase(it);
当擦除 std::list 中的元素时,MyList.end() 是否可以更改其值以使 end != MyList.end() 不再存在?
【问题讨论】:
-
我没有尝试编辑已接受的答案以使其更全面,而是编辑了问题,所以它只是
std::list。应该阅读每个容器的文档,了解它提供或不提供的失效保证的细节。 -
一般情况下,不要保存
end(),它只适用于部分容器,所以不要养成习惯。
标签: c++ iterator containers erase