我正在为STL和Boost不在桌面上的环境编写容器和迭代器的集合。在处理迭代器及其返回类型(例如通过 GetValue 函数)时,我在处理容器(例如 Vector)时有些挣扎,这些容器可以同时包含值类型和指针类型。由于想要支持常量迭代器,它变得更加复杂。我在这里看到了一系列特征的定义:value_type、引用、指针。我的问题是如何在创建迭代器的上下文中使用它们?本质上,鉴于我想要
Object & Vector<Object>::Iterator::GetValue()
Object * Vector<Object*>::Iterator::GetValue()
const Object & Vector<Object>::ConstIterator::GetValue()
const Object * Vector<Object*>::ConstIterator::GetValue()
value_type、参考、指针如何影响这一点?
迭代器的成员类型使用不多。幸运的是,您无需费心定义它们。std::iterator
基类会为您执行此操作。
template< typename value_type >
struct my_vector_iterator
: std::iterator< std::random_access_iterator_tag, value_type >
…
template< typename value_type >
struct my_vector_const_iterator
: std::iterator< std::random_access_iterator_tag, value_type const >
…