Если вы можете использовать Boost, для вас есть библиотека: http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/index.html
В частности, посмотрите на iterator_facade и iterator_adapter
Вот пример того, что нужно сделать - он предоставляет держатель std :: vector с STL-совместимыми итераторами. Вы можете расширить его, добавив другие методы, такие как operator [], size (), push_back () и т. Д.
шаблон
класс VectorHolder
{
общественности:
typedef T value_type;
общественность:
VectorHolder ()
: m_values ()
{
}
общественность:
typedef имя типа std :: vector :: iterator vector_iterator;
typedef имя типа std :: vector :: const_iterator vector_const_iterator;
class iterator : public boost::iterator_adaptor<iterator, vector_iterator>
{
public:
iterator()
: iterator::iterator_adaptor_()
{
}
iterator(const vector_iterator& it)
: iterator::iterator_adaptor_(it)
{
}
private:
friend class boost::iterator_core_access;
};
class const_iterator : public boost::iterator_adaptor<const_iterator, vector_const_iterator>
{
public:
const_iterator()
: const_iterator::iterator_adaptor_()
{
}
const_iterator(const vector_const_iterator& it)
: const_iterator::iterator_adaptor_(it)
{
}
const_iterator(const iterator& it)
: const_iterator::iterator_adaptor_(it.base())
{
}
private:
friend class boost::iterator_core_access;
};
iterator begin()
{
return iterator(m_values.begin());
}
iterator end()
{
return iterator(m_values.end());
}
const_iterator begin() const
{
return const_iterator(m_values.begin());
}
const_iterator end() const
{
return const_iterator(m_values.end());
}protected:
std::vector<T> m_values;};