如何迭代 STL 集并选择性地删除元素?
以下代码无法正常工作。应该如何正确地进行呢?
for (std::set<Color>::iterator i = myColorContainer.begin();
i!=myColorContainer.end();
++i)
{
if ( *i == Yellow)
{
DoSomeProccessing( *i );
myColorContainer.erase(i);
}
}
The following code does not work correctly. How should it be done correctly?
for (std::set<Color>::iterator i = myColorContainer.begin();
i!=myColorContainer.end();
++i)
{
if ( *i == Yellow)
{
DoSomeProccessing( *i );
myColorContainer.erase(i);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试:
Try:
当你处理一个集合时,你不需要循环。
You don't need a loop as youre dealing with a set.
一旦您使用
++i
转到下一条消息,它就保证是有效的 -std::set
的属性,插入元素上的迭代器永远不会失效,除非该元素被删除。
所以现在您可以安全地删除以前的条目。
Once you go to next message with
++i
it is guaranteed to be valid - property ofstd::set
that iterators on inserted elements are never invalidated unless the elementis removed.
So now you can safely erase previous entry.