C ++何时以及如何使用std :: iterator value_type,reference,pointer?

时间:2014-11-29 06:58:08

标签: c++ templates pointers reference iterator

我正在为STL和Boost不在桌面的环境编写容器和迭代器的集合。我在处理容器时遇到了一些困难,例如Vector,它可以包含值类型和指针类型,当涉及到处理迭代器及其返回类型时 - 例如通过GetValue函数。想要支持const迭代器更加复杂。我见过here关于一系列特征的定义:value_type,reference,pointer。我的问题是如何在创建迭代器的上下文中使用它们?基本上,鉴于我想要

Object & Vector<Object>::Iterator::GetValue()
Object * Vector<Object*>::Iterator::GetValue() 
const Object & Vector<Object>::ConstIterator::GetValue()
const Object * Vector<Object*>::ConstIterator::GetValue()

value_type,reference,pointer factor如何进入此?

1 个答案:

答案 0 :(得分:1)

迭代器的成员类型不是很常用。幸运的是,您不需要费心去定义它们。 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 >
    …