Почему мой пользовательский итератор не работает с копией STL?

Если у Вас есть байт [], необходимо быть в состоянии использовать класс BinaryReader и установленные значения на NewStuff с помощью доступных методов ReadX.

10
задан Community 23 May 2017 в 12:09
поделиться

3 ответа

Ваш queue_inserter должен быть производным от std :: iterator , чтобы все определения типов, такие как value_type , были правильно определены поскольку они используются в алгоритмах STL. Это определение работает:

template< typename T, typename U >
class queue_inserter : public std::iterator<std::output_iterator_tag, T>{
    queue<T, U> &qu;  
public:
    queue_inserter(queue<T,U> &q) : qu(q) { }
    queue_inserter<T,U> operator ++ (int) { return *this; }
    queue_inserter<T,U> operator ++ () { return *this; }
    queue_inserter<T,U> operator * () { return *this; }
    void operator = (const T &val) { qu.push(val); }
};
18
ответ дан 3 December 2019 в 14:11
поделиться

Получите его из std :: iterator. Если вам интересно, у доктора Добба есть статья о пользовательских контейнерах и итераторах.

8
ответ дан 3 December 2019 в 14:11
поделиться

Ваш итератор не соответствует требованию «присваиваемого» типа, который является требованием для итератора вывода, поскольку он содержит ссылку, а присваиваемые типы должны гарантировать, что после t = u , что t эквивалентно u .

Вы можете предоставить подходящую специализацию для iterator_traits для своего итератора либо путем получения специализации std :: iterator или указав его явно.

namespace std
{
    template<> struct iterator_traits<MyIterator>
    {
        typedef std::output_iterator_tag iterator_category;
        typedef void value_type;
        typedef void difference_type;
    };
}
6
ответ дан 3 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: