vector <int> :: const_iterator是一个output_iterator吗?

时间:2016-12-01 01:56:24

标签: c++ iterator language-lawyer c++-concepts

根据C ++概念:

  

除input_iterator之外的任何迭代器都是output_iterator。

random_access_iteratoroutput_iterator,当然是output_iterator

但是,根据cppreference.comvector<int>::const_iterator必须是可写的,而vector<int>::const_iterator则不可写。

output_iterator是{{1}}吗?

另请参阅:How to check if an iterator is an output_iterator in c++?

3 个答案:

答案 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 常量)迭代器应用于此之上,但没有必要带来在这种情况下,它进入了图片。