gpt4 book ai didi

c++ - 使迭代器取消引用对象

转载 作者:行者123 更新时间:2023-11-30 04:02:04 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com