Listing 2: Excerpt from the view's interface.

template
<
    typename StoredIterator,
    class Container = std::vector<StoredIterator>>

class view
{
public:
    // iterators for transparent access
    typedef view_iterator<typename Container::iterator>
        iterator;
    typedef view_iterator<typename Container::const_iterator>
        const_iterator;
    // iterators for raw container traversal
    typedef typename Container::iterator
        v_iterator;
    typedef typename Container::const_iterator
        v_const_iterator;
    // ...
    // iterators:
    iterator begin()
    {
        return iterator(container_.begin());
    }
    iterator end()
    {
        return iterator(container_.end());
    }
    // ...
    // raw container iterators:
    v_iterator v_begin()
    {
        return container_.begin();
    }
    v_iterator v_end()
    {
        return container_.end();
    }
    // capacity:
    size_type size() const
    {
        return container_.size();
    }
    // ...
    // element access:
    reference operator[](size_type n)
    {
        return *(container_[n]);
    }
    // ...
    // modifiers:
    void push_back(const StoredIterator &i)
    {
        container_.push_back(i);
    }
    // ...
private:
   Container container_;
};