C++:为什么输出迭代器不支持比较操作?
C++: why output iterators do not support comparison operations?
我读到除了输出迭代器,所有其他类别的迭代器都至少支持 == 和 != 运算符。
为什么输出迭代器不支持此功能?
不禁止比较i1
和i2
。std::vector::iterator
是OutputIterator
,你可以比较它们。你不能做的是假设所有OutputIterator
都可以比较。
所有的概念是说,一个类型不需要支持比较才能成为一个OutputIterator
,因为要求它意味着一些真正值得OutputIterator
的东西不是。一个例子是@NathanOliver的磁带迭代器。另一个例子是std::ostream_iterator
我们已经遇到过这样的情况:其中一个迭代器类别有一个过于繁琐的要求:ForwardIterator
要求取消引用返回引用类型。这意味着任何代理迭代器都仅限于InputIterator
,即使它支持--
、+=
、-=
等。
如果您发现自己正在编写多个想要写入的函数,直到它们"填充"输出,则可以考虑定义一个类别ComparableOutputIterator
(或某个这样的名称),并要求该类别的成员资格具有==
和OutputIterator
。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么指针在由后增量比较器操作时行为不同?
- 在 c++ 中使用 std::atomic 的比较和读/写操作<bool>?
- 为什么比较和交换操作同时存在免费函数和成员函数?
- 用自定义比较器设置操作STD ::设置操作
- C++:为什么输出迭代器不支持比较操作?
- 编写我们自己的比较操作
- C 比较字符串操作速度
- 原子 RMW 操作和函数调用的比较成本是多少?
- 比较提升::无锁::spsc_queue、提升::无锁::队列、串行队列操作
- 优先级队列如何在推送操作期间比较和存储值
- 比较操作线程对 std::atomic 变量是安全的吗?
- 如何进行每个元素的比较,并根据结果进行不同的操作
- 二进制比较操作的优雅方式
- xxx和bool在操作中的不安全混合仅在将值与TRUE进行比较时发出警告
- 如何使用原子增量和比较与交换操作处理整数溢出
- 按位操作比较结果错误
- 比较交换原子操作vs加载链接/存储条件操作
- 比较两个字符串(类似于GNUdiff的操作)