为STL迭代器定义了哪些运算符?

时间:2013-08-01 11:29:41

标签: c++ stl

我已经搜索了很多,但我无法找到答案。

为STL迭代器重载了哪些运算符?即list<t>::iterator, vector<t>::iterator, etc

我知道这些:

  • * - dereference operator

  • ++ - increment operator (both postfix and prefix)

我不知道更多。回到最初的问题:哪些运算符被定义为stl迭代器?

3 个答案:

答案 0 :(得分:4)

它取决于迭代器的类别:http://www.cplusplus.com/reference/iterator/iterator/

或者在这个链接上可能更清楚: http://en.cppreference.com/w/cpp/iterator

正如评论中所建议的,这里有一小部分标准:

  

24.2.1一般

     
      
  1. [...]本国际标准根据定义的操作定义了五类迭代器:输入迭代器输出迭代器转发迭代器双向迭代器随机访问迭代器,如下所示:
  2.   
Random Access -> Bidirectional -> Forward -> Input
                                          -> Output

例如,Forward迭代器满足输入迭代器的所有要求。

  

24.2.2迭代器

     

迭代器要求构成了迭代器概念分类法的基础;每个迭代器都满足迭代器的要求。这组要求指定用于解除引用和递增迭代器的操作。大多数算法需要额外的操作来读取(24.2.3)或写入(24.2.4)值,或者提供更丰富的迭代器移动

就像据说迭代器有需求来定义我们可以对它们进行的操作。

答案 1 :(得分:3)

这取决于迭代器的类型。对于前向迭代器( 最简单的,你需要:

class ForwardIterator
{
public:
    typedef ... difference_type;    // usually ptrdiff_t
    typedef ... value_type;
    typedef ... pointer;            // usually value_type*
    typedef ... reference;          // must be value_type&
    typedef std::forward_iterator_tag iterator_category;

    //  advance...
    ForwardIterator& operator++();
    ForwardIterator operator++( int );
    //  access...
    reference operator*() const;
    pointer operator->() const;
    //  check for end...
    bool operator==( Iterator const& other ) const;
    bool operator!=( Iterator const& other ) const;
};

除非您专业化,否则typedef是必要的 std::iterator_traits用于迭代器类型。他们可能是 通过从std::iterator公开继承来提供( 为所有除外提供适当的默认值 iterator_categoryvalue_type)。

双向迭代器还需要两个operator--和 随机访问迭代器需要更多。

答案 2 :(得分:0)

您可以在此处找到矢量迭代器的列表: Random Access Iterator operators

这里的列表迭代器: Bidirectional Iterator operators

简而言之,(并非详尽无遗)向量迭代器也有:

  • 比较运算符(&lt;,&lt; =,...)
  • 算术运算符(it1 + it2,it2 - it1,...)

对于列表迭代器和向量迭代器:

  • 等式/不等式测试运算符(it1 == it2,it1!= it2)