Может ли кто-нибудь помочь мне понять, о чем говорят ответы на этот вопрос?
(Пожалуйста, дайте мне знать, если этот вопрос неуместен, поскольку речь идет о другом вопросе.)
Вот вопрос, который я упомянул выше:
Я пытаюсь понять, как работает back_inserter, и это его реализация, полученная от SGI-STL:
Код: Выделить всё
template
class back_insert_iterator {
protected:
C* container;
public:
typedef C container_type;
typedef output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit back_insert_iterator( C& __x ) :container( &__x ) {
}
back_insert_iterator& operator=( const typename C::value_type& val ) {
container->push_back( val );
return *this;
}
back_insert_iterator& operator*() {
return *this;
}
back_insert_iterator& operator++() {
return *this;
}
back_insert_iterator& operator++( int ) {
return *this;
}
};
Ответ 1:
Они существуют, потому что алгоритмы STL работают с итераторами, которые должны быть инкрементируемыми после и предварительной инкрементации и иметь оператор разыменования.
Ответ 2: p>
Ваше предположение верно, и не более того. Все дело в концепции OutputIterator. back_insert_iterator — это OutputIterator, а это означает, что он должен работать с любым алгоритмом, который ожидает OutputIterators. Чтобы такие алгоритмы могли работать, в OutputIterator должны быть определены эти операторы:
Ответ 3:
back_inserter() возвращает back_insert_iterator, который должен функционировать как итератор вывода. В частности, он должен поддерживать такие операции, как приращение до и после, а также назначение разыменования.
Если бы он не поддерживал эти операции, его нельзя было бы использовать там, где требуются итераторы вывода.
Подробнее здесь: https://stackoverflow.com/questions/785 ... t-iterator
Мобильная версия