簡體   English   中英

使迭代器取消引用對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM