2

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

我正在处理的代码使用手动引用计数,因此,如果remove_if谓词返回 true,它将递减并删除底层对象引用。明显的问题是,这只remove_if在每个元素只调用一次谓词时才有效,否则后续调用将访问已删除的对象。有些东西告诉我,这并不能保证没问题,并且会出现一个点,即同一个元素将被传递给remove_if谓词两次以进行一次remove_if调用。

如果您有某种实现迭代器的疯狂数据结构,并说,为每个迭代器增量随机选择一个条目,直到它(随机)到达结束迭代器,我可以看到这将如何失败。但是对于简单的、标准化的结构,比如deque,vectorlist,单个元素可以多次传递给谓词吗?

4

1 回答 1

3

根据标准§23.3.4.6/14的草案:

复杂性:精确距离(开始(),结束())应用程序
的相应谓词。

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

于 2012-07-20T03:31:31.447 回答