[英]Make iterator dereference object
我有一個簡單的容器類,例如:
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(); }
};
很簡單。 但是,當我在for
循環中使用它時,我必須手動取消對該項的引用,如下所示:
SimpleContainer container;
for (auto item : container) {
cout << *item << endl; // Dereferencing here is ugly
}
有沒有一種簡單的方法可以使迭代器自動為我取消引用,還是我需要編寫一個具有該行為的新迭代器?
如果可以接受使用boost,則僅為此目的創建indirect_iterator
。 采用
using iterator = boost::indirect_iterator<std::vector<Contained*>::iterator>;
然后,您需要使用以下命令修改begin()
和end()
iterator begin() { return boost::make_indirect_iterator(items_.begin(); }
有關更多詳細信息, 請參見http://www.boost.org/doc/libs/1_56_0/libs/iterator/doc/indirect_iterator.html
您確定需要將指針存儲在容器中嗎? 我將像這樣實現您的代碼:
std::vector<Contained> items_;
在這種情況下,您不需要取消引用項目對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.