vector<int>::const_iterator 是 output_iterator 吗?

Is vector<int>::const_iterator an output_iterator?

根据 C++ 概念:

Any iterator other than input_iterator is an output_iterator.

一个vector<int>::const_iterator是一个random_access_iterator,那当然是一个output_iterator.

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

vector<int>::const_iteratoroutput_iterator吗?

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

没有。 vector<int>::const_iterator是一个常量迭代器[container.requirements.general]),这意味着它不满足输出迭代器的要求。

[iterator.requirements.general]/4:

Iterators that further satisfy the requirements of output iterators are called mutable iterators. Nonmutable iterators are referred to as constant iterators.


An vector::const_iterator is a random_access_iterator, and of course is an output_iterator.

这是完全错误的。

看这里:Cpp Reference

An OutputIterator is an Iterator that can write to the pointed-to element.

你的话显然是想说任何不满足输入迭代器要求的迭代器都是输出迭代器。

迭代器类别的标准层次结构定义(参见 24.2.1)以下具有嵌套要求

的迭代器类别序列

Random Access -> Bidirectional -> Forward -> Input

而输出迭代器类别是独立的。

这种嵌套意味着每一个Forward迭代器也是Input迭代器(即也满足Input迭代器类别的要求),每一个Bidirectional迭代器同时也是Forward和Input迭代器。这是你的 quite 应该被解释的上下文。

std::vector::const_iterator是随机访问迭代器,这使得它同时满足双向迭代器、前向迭代器和输入迭代器的要求。 IE。在这个意义上 std::vector::const_iterator 一个输入迭代器(!)。出于这个原因,您的报价不能用于推断它是一个输出迭代器。

进一步细分为mutable迭代器和nonmutable(constant)迭代器应用于最重要的是,但在这种情况下没有必要将其纳入画面。