根据C ++概念:
除input_iterator之外的任何迭代器都是output_iterator。
random_access_iterator
是output_iterator
,当然是output_iterator
。
但是,根据cppreference.com,vector<int>::const_iterator
必须是可写的,而vector<int>::const_iterator
则不可写。
output_iterator
是{{1}}吗?
另请参阅:How to check if an iterator is an output_iterator in c++?
答案 0 :(得分:4)
没有。 vector<int>::const_iterator
是常量迭代器([container.requirements.general]),这意味着它不满足输出迭代器的要求。
[iterator.requirements.general]/4:
进一步满足输出迭代器要求的迭代器称为 mutable iterator 。非可变迭代器称为常量迭代器。
vector :: const_iterator是一个random_access_iterator,当然是一个output_iterator。
这是完全错误的。
答案 1 :(得分:1)
请看这里:Cpp Reference
OutputIterator是一个可以写入指向的迭代器 元件。
答案 2 :(得分:0)
你的引用显然意味着任何不满足Input迭代器要求的迭代器都是一个输出迭代器。
迭代器类别的标准层次结构定义(见24.2.1)具有嵌套要求的以下迭代器类别序列
随机访问 - &gt;双向 - &gt;转发 - &gt;输入
虽然输出迭代器类别是独立的。
这种嵌套意味着每个Forward迭代器也是Input迭代器(即也满足Input迭代器类的要求),每个Bidirectional迭代器同时也是Forward和Input迭代器。这是你应该被解释的背景。
std::vector::const_iterator
是一个随机访问迭代器,它使它满足双向,前向和输入迭代器的要求。即从那个意义上来说,std::vector::const_iterator
是一个输入迭代器(!)。由于这个原因,你的引用不能用来推断它是一个输出迭代器。
进一步细分为 mutable 迭代器和 nonmutable (常量)迭代器应用于此之上,但没有必要带来在这种情况下,它进入了图片。