2016-12-01 4 views
2

:input_iterator以外ベクトル<int> :: const_iteratorはoutput_iteratorですか? C++の概念によれば

任意イテレータoutput_iteratorあります。

vector<int>::const_iterator

random_access_iteratorであり、そしてもちろん、output_iteratorとなります。

しかし、cppreference.comによれば、output_iteratorは書き込み可能でなければならず、vector<int>::const_iteratorは書き込み可能でなければなりません。

vector<int>::const_iterator

見る: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:さらに出力イテレータの要件を満たす

イテレータは可変イテレータ Sと呼ばれています。反復不可能な反復子は、定数反復子と呼ばれます。


ベクトル:: const_iteratorのはrandom_access_iteratorあり、そしてもちろんoutput_iteratorです。

これは単に間違っています。

1

はここを見て:Cpp Reference

アンOutputIteratorが 尖った-の要素に書き込むことができますイテレータです。

0

あなたの見積もりは、入力イテレータの要件を満たしていないイテレータが出力イテレータであることを明らかに示しています。

イテレータカテゴリ定義の標準階層(24.2.1を参照)ネストさ要件

ランダムアクセスがイテレータカテゴリの以下の配列 - >双方向 - >転送 - >入力

while出力イテレータカテゴリは単独で使用されます。

このネストは、すべてのForwardイテレータもInput iterator(つまりInput iteratorカテゴリの要件も満たす)であることを意味し、すべての双方向イテレータもForward Inputイテレータであることを意味します。これはあなたがかなり解釈されるはずの文脈です。

std::vector::const_iteratorは、ランダムアクセス・イテレータであり、双方向、順方向および入力イテレータの要件も満たします。私。その意味でstd::vector::const_iterator入力イテレータ(!)です。そのため、あなたの見積もりを使用して出力イテレータであると推論することはできません。

可変イテレータにさらに細分及びnonmutable定数)イテレータは、その上に塗布されるが、この場合の画像にそれを持参する必要はありません。