::iterator Iterator; std::vector-6ren">
gpt4 book ai didi

c++ - 如何使迭代器成为 "automatically dereferenced"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:23 29 4
gpt4 key购买 nike

假设我有这样的东西:

class Collection
{
private:
typedef std::vector< std::shared_ptr<Something> >::iterator Iterator;
std::vector< std::shared_ptr<Something> > data_;

public:
Iterator begin() {return data_.begin()}
Iterator end() {return data_.end()}
}

当我使用 Collection::Iterator例如,我需要取消引用它一次,以获得 std::shared_ptr<Something>对象并再次获得Something对象。

但是如果我想制作 std::shared_ptr<Something>只是一个实现细节,在一次取消引用之后,我应该得到一个 Something 是合理的对象。

即:

Collection collection;
Collection::Iterator it = collection.begin();
Something firstMember = *it; // instead of the current **it;

我的问题是,我是否需要将 Iterator 作为 Collection 的嵌套类从头开始并从此处实现随机访问迭代器所需的所有功能 http://www.cplusplus.com/reference/std/iterator/还是有一些众所周知的方法?可能是 C++11?

最佳答案

听起来你正在实现的东西是存在的,叫做 boost::ptr_vector . Boost 还提供了 a library用于以更少的痛苦实现迭代器。听起来你要找的是 boost::indirect_iterator

关于c++ - 如何使迭代器成为 "automatically dereferenced"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11389000/

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