我一直在阅读最新的 C++ 规范,但我无法弄清楚是否remove_if
可以为同一个元素多次调用。特别是,我正在考虑在迭代器上std::remove_if
被调用。deque
据我所知,如果它所做的只是从第一个参数开始并迭代到第二个,那么没有理由多次调用它。
我正在处理的代码使用手动引用计数,因此,如果remove_if
谓词返回 true,它将递减并删除底层对象引用。明显的问题是,这只remove_if
在每个元素只调用一次谓词时才有效,否则后续调用将访问已删除的对象。有些东西告诉我,这并不能保证没问题,并且会出现一个点,即同一个元素将被传递给remove_if
谓词两次以进行一次remove_if
调用。
如果您有某种实现迭代器的疯狂数据结构,并说,为每个迭代器增量随机选择一个条目,直到它(随机)到达结束迭代器,我可以看到这将如何失败。但是对于简单的、标准化的结构,比如deque
,vector
和list
,单个元素可以多次传递给谓词吗?