gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:26:26 28 4
gpt4 key购买 nike

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

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

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

最佳答案

根据 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com