Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:我可以使用成员变量的迭代器并使其成为类之一吗?_C++_Vector_Iterator - Fatal编程技术网

C++ C++;:我可以使用成员变量的迭代器并使其成为类之一吗?

C++ C++;:我可以使用成员变量的迭代器并使其成为类之一吗?,c++,vector,iterator,C++,Vector,Iterator,我有一个slot\u map类,它使用std::vector存储所有数据。我需要一个slot\u map::iterator(和一个const\u iterator)。我可以用一种有点难看的方式来做这件事——自己制作迭代器,让它像std::vector::iterator的接口一样工作,但这似乎是一个比它必须的复杂得多的解决方案(另外,我想明确指出,slot\u map迭代器不能仅仅是一个传递的std::vector::iterator)。那么,有没有更简单的方法来使用vector::itera

我有一个
slot\u map
类,它使用
std::vector
存储所有数据。我需要一个
slot\u map::iterator
(和一个
const\u iterator
)。我可以用一种有点难看的方式来做这件事——自己制作迭代器,让它像
std::vector::iterator
的接口一样工作,但这似乎是一个比它必须的复杂得多的解决方案(另外,我想明确指出,
slot\u map
迭代器不能仅仅是一个传递的
std::vector::iterator
)。那么,有没有更简单的方法来使用
vector::iterator
并羞耻地宣称它是我自己的

编辑:slot_map数据结构使用多个向量来存储数据,并允许在固定时间内插入和删除,以及快速迭代。其中一个向量包含所有数据(其顺序可以更改),另一个向量保留这些数据的索引以及该位置的代数(用于确定数据是否标记为已删除,不应允许用户访问),最后一个将索引保留在索引中(是的,很奇怪),以允许在不破坏整个结构的情况下持续删除时间


我需要做的只是通过数据向量进行迭代(向量中的对象可以在任何插入和擦除期间改变顺序,或者整个向量可以因为重新分配而移动-迭代器当然会因此变得无效)但是,迭代器必须来自
slot\u map
结构,而不是
向量
,这取决于您希望使用这种迭代器实现什么。如果它只是对底层数据的无序访问,则使用
typedef
和关联的
begin()
end()
方法是最简单、最便宜的解决方案,例如

template<typename T> class slot_map {
public:
    typedef std::vector<T>::const_iterator const_iterator;

    const_iterator begin() const { return data.begin(); }
    const_iterator end() const { return data.end(); }

    // ...
private:
    std::vector<T> data;
    std::vector<size_t> indexes;
};
模板类槽图{
公众:
typedef std::vector::const_迭代器const_迭代器;
常量迭代器begin()常量{返回数据。begin();}
const_迭代器end()const{return data.end();}
// ...
私人:
std::矢量数据;
std::向量索引;
};

尽管提供写访问权是另一回事,因为您将索引保存到数据中。写入
数据
向量很可能会使这些索引无效。

为什么不在类中使用向量?您可以发布一些您想要实现的代码吗?从您编写的内容来看,您希望提供一个完整的接口要在类中使用向量,为什么不只使用其中一个向量呢?我现在有一个这样的结构:
struct slot\u map{…private:std::vector data;..}
我希望能够执行迭代器操作,如
slotmap.begin(),它将返回一个<代码> StulyMa::ItActuals对象。我很确定这是一个非常简单的解决方案,或者根本没有,但是我就是找不到它。而且,尽管我有一些C++经验,但是我对迭代器不是很好,所以请原谅我的解决方法是否很明显。为什么不想做SLUTLY?但是你想用迭代器完全访问它吗?我看不出有什么区别