首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义用于迭代不同容器类型的通用转换迭代器

定义用于迭代不同容器类型的通用转换迭代器
EN

Stack Overflow用户
提问于 2012-11-30 18:30:14
回答 1查看 358关注 0票数 1

我有一个类似以下内容的类:

代码语言:javascript
复制
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。据我所知,转换迭代器仍然需要在模板参数中给出底层容器迭代器。那么,有没有一种方法可以使用转换迭代器来定义映射关键字周围的自定义迭代器类型,同时使其适用于不同类型的映射容器?

EN

回答 1

Stack Overflow用户

发布于 2012-11-30 18:50:36

如果你在使用Boost,你可以使用any_range

代码语言:javascript
复制
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虚拟只需要构造适当的迭代器:

代码语言:javascript
复制
iterator begin() { return iterator(object.begin()); }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13643384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档