我有一个简单的容器类,例如:
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
关于c++ - 使迭代器取消引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25406667/