我一直在阅读最新的 C++ 规范,但我无法确定是否可以对同一元素多次调用 remove_if
。特别是,我正在查看在 deque
迭代器上调用 std::remove_if
。据我所知,如果它所做的只是从第一个参数开始并迭代直到第二个参数,那么没有理由多次调用它。
我正在处理的代码使用手动引用计数,因此,如果 remove_if
谓词返回 true,它将递减并删除底层对象引用。明显的问题是,只有在每个元素仅调用一次 remove_if
谓词时,这才有效,否则后续调用将访问已删除的对象。有些事情告诉我,这并不能保证一定会成功,并且在一次 remove_if
调用中,相同的元素将被传递到 remove_if
谓词两次。
如果你有某种疯狂的数据结构来实现迭代器,并且为每个迭代器增量随机选择一个条目,直到它(随机)出现在最终迭代器上,我可以看到这将如何失败。但对于像 deque
、vector
和 list
这样直接的标准化结构,是否可以将单个元素多次传递给谓词?
最佳答案
根据a draft of the standard §23.3.4.6/14:
Complexity: Exactly distance(begin(), end()) applications of the corresponding predicate.
如果引用内容有点偏差,请原谅;这实际上是我第一次正式引用它。我希望这是您正在寻找的信息。
关于c++ - 是否保证每个迭代器仅调用一次remove_if谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572414/