gpt4 book ai didi

c++ - 如果输入迭代器不是随机访问,如何告诉Advance()在输入迭代器上使用+=运算符

转载 作者:IT老高 更新时间:2023-10-28 22:22:23 25 4
gpt4 key购买 nike

考虑像 join_iterator 这样的输入迭代器:它迭代其他范围的串联。重复调用 ++i 可能比简单的 i += n很多

尽管如此,大多数需要将迭代器推进任意数量的 C++ 代码都使用 std::advance,当迭代器不在时,它会自动调用 ++i t 随机访问。

(遗憾的是,大多数人使用 std::advance(i, n) 而不是 using std::advance; advance(i, n),所以我可以'不只是为我的迭代器提供 advance 并依赖 ADL。)

另一方面,我不能使用 ++= 因为输入迭代器不必实现它们。

所以问题是:我将如何支持这样的场景,什么时候:

  • 实现这样的迭代器?

  • 使用输入迭代器,它可能具有优化的 operator +=

(请注意,advance+ 并不是唯一重要的场景——distance-有同样的问题。)

最佳答案

根据 C++11 §24.4.4,

Since only random access iterators provide + and - operators, the library provides two function templates advance and distance. These function templates use + and - for random access iterators (and are, therefore, constant time for them); for input, forward and bidirectional iterators they use ++ to provide linear time implementations.

您应该只需要定义 +-,并指定 std::random_access_iterator_tag。无需专门化或重载 std::advance

关于c++ - 如果输入迭代器不是随机访问,如何告诉Advance()在输入迭代器上使用+=运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663541/

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