在C ++中扩展迭代器

时间:2013-12-20 22:42:54

标签: c++ inheritance iterator range-checking

我试图实现一个封装另一个迭代器并执行范围检查的迭代器。因此,我从那个Iterator扩展如下:

 template<typename ITERATOR_T>
 class r_iterator : public ITERATOR_T {

     //...

     r_iterator (ITERATOR_T begin, ITERATOR_T end) {
         this->begin = begin;
         this->end = end;
    }
 };

我想使用构造函数中传递的迭代器来执行范围检查。我的想法是将&#34; this&#34; -iterator(即r_iterator)指向的东西设置为&#34; begin&#34;指向的元素。构造函数的迭代器。我想这样做我可以覆盖某些方法,比如operator ++,例如,执行范围检查,然后调用类I的超级方法扩展。

我想知道是否有可能以某种方式设置元素&#34;这个&#34; -iterator(r_iterator)指向我假设我扩展了一些STL Iterator类。

遗憾的是,我无法在c ++参考资料中找到任何相关信息。

问候并谢谢

1 个答案:

答案 0 :(得分:0)

没有必要继承,你可以编写一个这样的简单包装类:

#include <iostream>
#include <vector>
#include <stdexcept>

template <typename Iterator>
class MyIterator
{
    Iterator _begin;
    Iterator _end;
    Iterator _cur;
public:
    explicit MyIterator(Iterator begin, Iterator end)
        : _begin(begin), _end(end)
    {
        _cur = _begin;
    }

    bool has_next() const 
    {
        return (_cur != _end);
    }

    void operator++(int dummy) 
    { 
        if (!has_next())
            throw std::out_of_range("Out of range.");
        _cur++;
    }
};

int main(int argc, char* argv[]) 
{
    std::vector<int> v = {1, 2, 3};
    MyIterator<std::vector<int>::iterator> my_it(v.begin(), v.end());
    my_it++;
    my_it++;
    my_it++;
    my_it++;
    return 0;
}