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. [...]この国際標準では、以下に示すように、入力反復子出力反復子前方反復子双方向反復子、およびランダム アクセス反復子の 5 つのカテゴリの反復子が定義されています。
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_categoryvalue_type

双方向イテレータにも 2 つが必要operator--で、ランダム アクセス イテレータにはさらに多くの が必要です。

于 2013-08-01T11:42:56.717 に答える
0

ここでベクトル反復子のリストを見つけることができます: Random Access Iterator 演算子

リストイテレータについては、次のとおりです。 双方向イテレータ演算子

要するに、(すべてを網羅しているわけではありませんが) ベクトル反復子には次のものもあります。

  • 比較演算子 (<、<=、...)
  • 算術演算子 ( it1 + it2, it2 - it1, ... )

また、リスト反復子とベクトル反復子の両方について:

  • 等式/不等式テスト演算子 (it1 == it2, it1 != it2)
于 2013-08-01T11:35:28.330 に答える