求助:如何重写一个可以在循环过程中安全删除的容器

铂金小烟 发布于 2014/07/28 21:10
阅读 91
收藏 1
最近遇到个问题,就是在标准库容器比如说std::vector遍历的过程中删除元素,而且是在元素自己执行成员函数Update的时候有可能会出现删除的情况,例如:
std::vector<MyClass> vm = {...};
for (auto iter = vm.begin(); iter != vm.end(); ++iter)
{
    iter->Update();
}
在iter->Update()中有可能会执行vm.erase(),所以想设计一个新的容器,在不改变上面代码结构的情况下,可以安全的运行,求助各位大大们有没有什么好办法啊?
加载中
0
星爷
星爷
在update的时候,如果要删除就做个标记在循环外面给删除掉。
0
newzai
newzai
如果Update删除的是,当前的iter,则可以通过返回值来,让外层循环删除;如果涉及到删除其它的元素,则建议通过外层循环必须是copy原来的那个vector。而vm.erase删除之前的那个原始数据;
赵占涛
赵占涛
就是有问题 所以才想重写嘛~
newzai
newzai
回复 @赵占涛 : 那只有for循环的时候是copy 容器,否则在内层循环删除的时候,迭代器会出问题。特别是删除当前的迭代器
赵占涛
赵占涛
楼主说的是不改变代码结构 然后重写容器
返回顶部
顶部