2016-12-01 2 views
2

В соответствии с понятиями C++:Есть вектор <int> :: const_iterator output_iterator?

Любой итератора, кроме input_iterator является output_iterator.

A vector<int>::const_iterator является random_access_iterator, и, конечно же, что это output_iterator.

Однако, согласно cppreference.com, output_iterator должен быть доступен для записи, а vector<int>::const_iterator - нет.

vector<int>::const_iterator a output_iterator?

Смотрите также: How to check if an iterator is an output_iterator in c++?

+0

Это не так. Итератор вывода - это итератор с записью. –

ответ

4

No. 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) в следующей последовательности итераторных категорий с вложенных требованиями

Random Access -> Двунаправленный -> Вперед -> Input

, в то время как категория итератора вывода стоит отдельно.

Это вложение означает, что каждый итератор ввода также является входным итератором (т. Е. Также удовлетворяет требованиям категории ввода-итератора), каждый двунаправленный итератор также является одновременно и перекрестным и вводным итератором. Это контекст, в котором вы, скорее всего, должны интерпретироваться.

std::vector::const_iterator - это итератор произвольного доступа, который позволяет ему удовлетворять требованиям двунаправленного, форвардного и ввода-итератора. То есть в этом смысле std::vector::const_iteratoris a Итератор ввода (!). По этой причине ваша цитата не может быть использована для вывода, что она является итератором вывода.

Дальнейшее подразделение в изменяемых итераторы и nonmutable (постоянные) итераторы наносится поверх этого, но это не является необходимым, чтобы привести его в картину в этом случае.

Смежные вопросы