C++ 使迭代器取消引用对象

C++ 使迭代器取消引用对象,c++,C++,我有一个简单的容器类,例如: class SimpleContainer { using iterator = std::vector<Contained*>::iterator; std::vector<Contained*> items_; // Note that 'Contained' is polymorphic. public: iterator begin() { return items_.begin(); } iter

我有一个简单的容器类,例如:

class SimpleContainer {
    using iterator = std::vector<Contained*>::iterator;

    std::vector<Contained*> items_; // Note that 'Contained' is polymorphic.

public:
    iterator begin() { return items_.begin(); }
    iterator end() { return items_.end(); }    
};

有没有一种简单的方法可以让迭代器自动取消引用,或者我需要编写一个具有这种行为的新迭代器?

如果使用boost是可以接受的,那么创建
间接迭代器就是为了这个目的。使用

using iterator = boost::indirect_iterator<std::vector<Contained*>::iterator>;

有关详细信息,请参见

是否确实需要在容器中存储指针?我会像这样实现您的代码:

std::vector<Contained> items_;
std::向量项;

在这种情况下,您不需要取消引用item对象。

很高兴知道。尝试只使用c++11 STL,但很高兴知道它就在那里。
s/STL/standard library/
非常清楚(考虑到您是c++新手),您知道
这里不是
迭代器
,而是一个无引用的
迭代器
——换句话说,它是一种类似于包含的
类型*
,由于这是
向量中的内容
。当我们讨论这个主题时,请不要将原始指针存储在容器中,或者(应用免责声明)编写
新建
删除
。相反,存储
unique\u ptr
或(如果必须)使用
make\u unique
创建的
shared\u ptr
(请参阅)或
make\u shared
)来创建的
shared\u ptr
。也就是说,在我看来,传递原始指针是最好的情况并不少见——只要清楚并保持所有权语义的一致就行了。太棒了,谢谢您的帮助。很高兴我这么问。嘿,不客气。很高兴我能帮忙。包含是多态的,所以我想我必须使用指针。
iterator begin() { return boost::make_indirect_iterator(items_.begin(); }
std::vector<Contained> items_;