remove_if谓词是否保证每个迭代器只调用一次?

时间:2012-07-20 03:23:38

标签: c++ stl iterator deque remove-if

我一直在阅读最新的C ++规范,我无法弄清楚remove_if是否可以多次为同一个元素调用。特别是,我正在考虑在std::remove_if迭代器上调用deque。据我所知,没有原因可以多次调用它,如果它只是从第一个参数开始并一直循环到第二个参数。

我正在处理的代码使用手动引用计数,因此,如果remove_if谓词将返回true,它将减少并删除基础对象引用。显而易见的是,只有remove_if谓词仅针对每个元素调用一次,否则这只会有效,否则后续调用将访问已删除的对象。有些东西告诉我这不能保证是正确的,并且会有一个点将同一个元素传递给remove_if谓词两次以进行单个remove_if调用。

如果你有某种疯狂的数据结构实现了迭代器,并且说,随机选择每个迭代器增量的一个条目,直到它(随机)出现在结束迭代器上,我可以看到它会如何失败。但对于像dequevectorlist这样的直接标准化结构,是否可以将多个元素多次传递给谓词?

1 个答案:

答案 0 :(得分:2)

根据a draft of the standard§23.3.4.6/ 14:

Complexity: Exactly distance(begin(), end()) applications 
of the corresponding predicate.

请原谅我,如果参考有点偏;它实际上是我正式引用它的第一个。我希望这是你正在寻找的信息。