Listing 1: The overwrite iterator class

#include <iterator>

template<class Cont>
    class overwrite_iterator
        : public std::iterator<std::output_iterator_tag, void, void> {
public:
    typedef Cont container_type;
    typedef Cont::value_type value_type;
    explicit overwrite_iterator(Cont& x)
        : cont(x), iter(x.begin())
    {}
    overwrite_iterator(Cont& x, Cont::iterator it)
        : cont(x), iter(it)
    {}
    overwrite_iterator& operator=(const Cont::value_type& val)
    {
        iter == cont.end() ? cont.push_back(val) 
                                 : (*iter = val, ++iter);
        return *this;
    }
    overwrite_iterator& operator*()
    {
        return *this;
    }
    overwrite_iterator& operator++()
    {
        return *this;
    }
    overwrite_iterator operator++(int)
    {
        return *this;
    }
    operator Cont::iterator()
    {
        return iter;
    }
protected:
    Cont& cont;
    Cont::iterator iter;
    };
— End of Listing —