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_;