gpt4 book ai didi

c++ - 定义通用变换迭代器以迭代不同的容器类型

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:18 30 4
gpt4 key购买 nike

我的类(class)如下:

class ArraySim{

public:
DataStructure* ds;
ArraySim(bool which){
if(true)
ds = new STDMap();
else
ds = new HashMap();
}
value_type& operator[](int idx){
return ds->getValAtIndex(idx);
}

//define a custom iterator type that can be used to iterate over both std::map and boost::unordered //map keys.
}

class DataStructure{

vitrual value_type& getValAtIndex(int idx)=0;
};

class STDMap: public DataStructure{
//Class that wraps a std::map object and implements the virtual method to return the value against a //particular index(key)
};

class HashMap: publlic DataStructure{
//Class that wraps a boost::unordered_map object and implements the virtual method to return the value //against a particular index(key)
}

我经历过:Generic IteratorTransform Iterator .据我了解,转换迭代器仍然需要您在模板参数中提供底层容器迭代器。那么有没有一种方法可以使用转换迭代器围绕 map 键定义自定义迭代器类型,同时使其适用于不同类型的 map 容器?

最佳答案

如果您使用的是 Boost,则可以使用 any_range .

typedef any_range<value_type, boost::forward_pass_traversal_tag,
value_type &, std::ptrdiff_t> range;
typedef any_range<value_type, boost::forward_pass_traversal_tag,
const value_type &, std::ptrdiff_t> const_range;
typedef range::iterator iterator;
typedef const_range::const_iterator const_iterator;

virtual iterator begin() = 0;
virtual iterator end() = 0;
virtual const_iterator begin() const = 0;
virtual const_iterator end() const = 0;

您的beginend 虚拟只需要构造适当的迭代器:

iterator begin() { return iterator(object.begin()); }

关于c++ - 定义通用变换迭代器以迭代不同的容器类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643384/

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