gpt4 book ai didi

c++ - 根据 C++17 标准,为什么反向迭代器不是正式的迭代器类别?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:46 24 4
gpt4 key购买 nike

反向迭代器不在迭代器类别标签列表中,因此假定它不是一个类别。那么它到底是什么?

最佳答案

迭代器类别编码功能级别

  • 输入迭代器是最低限度的 - 可递增和解引用一次
  • 前向迭代器是一种输入迭代器,您可以多次取消引用并支持多遍。
  • 双向迭代器是可以递减的正向迭代器
  • 随机访问迭代器是一个双向迭代器,您可以将 O(1) 推进 +/- n
  • 连续迭代器是指连续内存的随机访问迭代器

这些级别的功能由算法使用 - 一些算法需要特定级别的功能,一些算法可以简单地基于特定级别的功能进行优化(例如 advance(it, n) 对于随机访问迭代器可以只执行 it += n 而对于前向迭代器它必须是 ++it 在一个循环中)。

但是“反转”不是一个功能级别 - 它只是呈现基础数据的一种不同方式。反向迭代器不属于自己的迭代器类别,原因与“移动”迭代器不属于或“过滤”迭代器不属于或“计数”迭代器不属于相同的原因。算法不关心迭代器是否颠倒——它们以相同的方式工作。 ++it 实际移动迭代器的方式并不重要。

反向迭代器只是迭代器。 std::reverse_iterator被称为迭代器适配器(以及许多其他适配器,如 std::move_iterator )——它是一个适配不同迭代器的迭代器。但是您可以编写一个不是适配器的反向迭代器——实际上,您甚至可以编写一个非双向的反向迭代器!这两个概念是正交的。

关于c++ - 根据 C++17 标准,为什么反向迭代器不是正式的迭代器类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55226605/

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