0

我真的用谷歌搜索了很多,但我找不到答案。

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

我知道这些:

  • * - dereference operator

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

我不知道更多。回到最初的问题:stl 迭代器定义了哪些操作符?

4

3 回答 3

4

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

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

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

24.2.1 总则

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

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

24.2.2 迭代器

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

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

于 2013-08-01T11:34:01.147 回答
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_category和之外的所有内容提供适当的默认值value_type)。

双向迭代器也需要这两个operator--,而随机访问迭代器需要更多。

于 2013-08-01T11:42:56.717 回答
0

您可以在此处找到向量迭代器的列表: 随机访问迭代器运算符

对于这里的列表迭代器: 双向迭代器运算符

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

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

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

  • 等式/不等式测试运算符 (it1 == it2, it1 != it2)
于 2013-08-01T11:35:28.330 回答