如何使迭代器“自动解除引用”?

时间:2012-07-09 04:13:46

标签: c++ c++11 iterator

假设我有这样的事情:

class Collection
{
private:
    typedef std::vector< std::shared_ptr<Something> >::iterator Iterator;
    std::vector< std::shared_ptr<Something> > data_;

public:
    Iterator begin() {return data_.begin()}
    Iterator end()  {return data_.end()}
}

当我使用Collection::Iterator实例时,我需要取消引用一次,获取std::shared_ptr<Something>对象,然后再获取Something个对象。

但是如果我想让std::shared_ptr<Something>只是一个实现细节,那么在一次解除引用后,我应该得到一个Something对象是合理的。

那是:

Collection collection;
Collection::Iterator it = collection.begin();
Something firstMember = *it;  // instead of the current **it;

我的问题是,我是否需要从头开始将Iterator作为Collection的嵌套类,并从此处http://www.cplusplus.com/reference/std/iterator/实现随机访问迭代器所需的所有函数,或者是否有一些众所周知的进场?可能是C ++ 11?

1 个答案:

答案 0 :(得分:10)

听起来你正在实施的内容被称为boost::ptr_vector。 Boost还提供a library来实现更少痛苦的迭代器。听起来你正在寻找的是boost::indirect_iterator