我一直在阅读最新的C ++规范,我无法弄清楚remove_if
是否可以多次为同一个元素调用。特别是,我正在考虑在std::remove_if
迭代器上调用deque
。据我所知,没有原因可以多次调用它,如果它只是从第一个参数开始并一直循环到第二个参数。
我正在处理的代码使用手动引用计数,因此,如果remove_if
谓词将返回true,它将减少并删除基础对象引用。显而易见的是,只有remove_if
谓词仅针对每个元素调用一次,否则这只会有效,否则后续调用将访问已删除的对象。有些东西告诉我这不能保证是正确的,并且会有一个点将同一个元素传递给remove_if
谓词两次以进行单个remove_if
调用。
如果你有某种疯狂的数据结构实现了迭代器,并且说,随机选择每个迭代器增量的一个条目,直到它(随机)出现在结束迭代器上,我可以看到它会如何失败。但对于像deque
,vector
和list
这样的直接标准化结构,是否可以将多个元素多次传递给谓词?
答案 0 :(得分:2)
根据a draft of the standard§23.3.4.6/ 14:
Complexity: Exactly distance(begin(), end()) applications of the corresponding predicate.
请原谅我,如果参考有点偏;它实际上是我正式引用它的第一个。我希望这是你正在寻找的信息。