STL容器迭代器和C指针迭代器有什么区别

斯瓦普尼尔

我正在编写一个反向迭代器,作为我自己的自定义矢量类的一部分。到目前为止,我所写的内容如下。

class MyVector
{
  public:

  typedef T                           value_type;
  typedef value_type*                 pointer;
  typedef const value_type*           const_pointer;
  typedef value_type&                 reference;
  typedef const value_type&           const_reference;
  typedef pointer                     iterator;
  typedef const_pointer               const_iterator;
  typedef size_t                      size_type;

    class reverse_iterator
    {
        private:

        iterator iter;

        public:

        inline reverse_iterator(iterator a=0) : iter(a) {}
        inline reverse_iterator(const reverse_iterator& rev_iter) : iter(rev_iter.iter) {}
        inline reverse_iterator& operator++()
        {
            --iter;
            return *this;
        }
        // and remaining other operator functions
    };

  inline iterator begin (void) { return ((iterator)data_array);           }
  inline iterator end (void)   { return ((iterator)data_array+number_of_elements); }
  inline reverse_iterator      rbegin(void)    { return end()-1;}
  inline reverse_iterator      rend(void)      { return begin()-1;}


    //functions for myvector class 
}; //end of Myvector class

在上面的类中,iterater只是C风格的指针,而reverse_iterator是类。所以当我做

    main()
    {
        myVector<int> i;
        myVector<int>::reverse_iterator rit= i.begin();
    }

我的reverse_iterator已使用begin()函数初始化,并且代码正在编译并运行。但这在STL的迭代器和reverse_iterator情况下不会发生。它们阻止了这种初始化。例如:reverse_iterator不允许自己使用begin()函数初始化,而必须使用rbegin()初始化

那么我该怎么做才能避免这种初始化呢?我应该写一个像STL中一样的不同迭代器吗?而且我认为这是不可能的..请给我一些解决方案...

亚当

迭代器和反向迭代器有一些区别。

最明显的是:增加每个迭代器将它们朝相反的方向移动。

不太明显的:回归begin()不是一个反向迭代结束。begin()-1将是。请记住,它end()表示“一个过去”,因为C ++范围是半开的,即[begin,end)。如果您只是交换begin()end()在反向迭代器中,则反向迭代器将具有范围(开始,结束)。

换句话说,即使迭代器和反向迭代器本身在某些方面兼容,STL容器也具有begin()end()rbegin()的原因是有原因的rend()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java和C ++中的迭代器有什么区别?

前哨和结束迭代器有什么区别?

Python 文件迭代器和列表迭代器有什么区别?

迭代器和可迭代之间有什么区别,以及如何使用它们?

具有迭代器和继承的STL容器

rust迭代器的position()和rposition()之间有什么区别,有什么原因吗?

迭代器和数组有什么区别?

迭代器和back_insert_iterator有什么区别?

Mypy迭代器和生成器有什么区别?

迭代器和标量对象之间的不确定行为有什么区别?

迭代和循环有什么区别?

迭代器与STL容器的关系

如何在C ++中存储对stl容器元素的指针/迭代器引用?

Rust迭代器和C ++迭代器之间的主要区别是什么?

stl迭代器的后缀和前缀增量之间的区别?

使用c ++ stl迭代器代替传统指针的正确方法是什么?

IAsyncEnumerable <T>与迭代器生成的IEnumerable <Task <T >>有什么区别?

JS中真正的数组和数组迭代器有什么区别

稀疏的容器和迭代器

STL容器中的迭代器实现

Q学习和价值迭代有什么区别?

C ++(stl)与Java中的迭代器在概念上有区别吗?

Swift 或 Objective C 中枚举器和迭代器的区别

如果迭代器在STL容器中无效,指针是否会失效

为什么我的迭代器和指针没有给出相同的地址?

让ITER是一个的std ::迭代器。有(ITER,1),并++ ITER性病有什么区别::接下来呢?

*(指针)和(*指针)有什么区别?

堆栈指针和程序计数器有什么区别?

指针和值接收器类型之间有什么区别?