我可以使用反向迭代器作为ForwardIt吗
Can I use reverse iterator as ForwardIt?
基于这个问题。std::rotate定义如下:
template< class ForwardIt >
constexpr ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last );
从名称ForwardIt
来看,它期望使用前向迭代器。
问题:假设我的初始集合支持正向迭代器(例如vector
(,我可以在这里使用反向迭代器吗?为什么/为什么不?
例如,http://www.cplusplus.com/reference/iterator/reverse_iterator/,我不明白返回的内容是否被视为前向迭代器。我必须保证反向迭代器满足正向迭代器的属性吗?在这种情况下,我如何检查它是真的?vector::rbegin((文档没有提到是否是这种情况。
查看iterator_category
成员typedef。迭代程序通过将其类别设置为适当的标记来报告其类别。
[https://en.cppreference.com/w/cpp/iterator/reverse_iterator]
iterator_category
——如果std::iterator_traits<Iter>::iterator_category
为std::derived_from<std::random_access_iterator_tag>
建模,则此为std::random_access_iterator_tag
。否则,这是std::iterator_traits<Iter>::iterator_category
不变。
给定原始迭代器必须至少是双向的(请参阅链接(,这意味着生成的迭代器要么是随机访问的(如果原始迭代程序至少是随机访问(,要么是双向的。
(这里使用std::derived_from
是因为当A是B的子集时,类别A继承自类别B,这意味着A的需求是B的需求的超集。唯一继承自random_access_iterator_tag
的是contiguous_iterator_tag
。(
reverse_iterator
的要求以相反的方式给出。其他要求:
模板参数Iterator应满足Cpp17BidirectionalIterator([双向.iterators](或模型双向迭代器([迭代器概念.bidir](的要求。
和迭代器的要求
双向迭代器概念增加了向前和向后移动迭代器的能力。
所以是的,reverse_iterator
可以用作forward_iterator
。
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?