2011-03-06 7 views
31

C++ STLにはいくつのタイプのイテレータがありますか?今のところ、私はこれらの知っている:イテレータのタイプ:出力vs入力vs.前方アクセスvsランダムアクセス反復子

  • 出力イテレータ
  • 入力イテレータ
  • イテレータ
  • ランダムアクセスイテレータ

はもっとありますか?彼らの違いは何ですか?それぞれの限界と特徴は何ですか?どのタイプがいつ使用されますか?

答えて

35

これを整理して非常に便利です。この本は、STLイテレータに関する章全体を含んでいます。この答えは唯一の4つの質問の最初は、これらのタイプについて提起として

Iterator Category Ability       Providers 
----------------- ------------------------------- ---------------------------- 
Input iterator  Reads forward     istream 
Output iterator Writes forward     ostream, inserter 
Forward iterator Reads/writes forward    forward_list, 
                 unordered_[multi]set, 
                 unordered_[multi]map 
Bidirectional it. Reads/writes forward/backward list, [multi]set, [multi]map 
Random access it. Reads/writes with random access vector, deque string, array 
+2

これはC++ 11に関する情報が不足しているので、今は古くなっていますが、afaikにはフォワードイテレータを提供するコンテナが今すぐ存在しています: 'forward_list'、' unordered_set'、 'unordered_multiset '、' unordered_map'と 'unordered_multimap'です。 – Jules

+2

@Julesこれは時代遅れですか? C++ 11では新しいイテレータが導入されていないため、古いイテレータの動作は変更されていないため、かなり正確です。どのコンテナがどのイテレータをサポートしているかは、この質問には関係ありません。 –

+0

質問で具体的に質問されていないかもしれませんが、情報が回答に含まれていたので、情報が変更されたときにコメントすることが適切です。 – Jules

15

C++標準には、逆方向イテレータ(operator--)も使用できるForward Iteratorという双方向イテレータコンセプトがあります。これらの5つが一緒になって、C++標準の段落24.2のイテレータ階層全体を形成します。

古いSTLには、Trivial Iteratorという概念もありました。さまざまなイテレータに関する詳細は、Iterator overviewを参照してください。

ブースト設計者Abrahams、Siek、Wittは、より細かいイテレータの概念のセットをpresentedとしています。

+0

Downvoted:ここ

は本から少し何かです。 @ zkunovの答えは古いバージョン/追加に関する追加情報が欠けているにもかかわらず、はるかに優れています。 – Jules

+0

@Julesこの回答が受け入れられたのは残念ですが、それを下降させても、答えの中で実際にはそれを低くすることはありません。 –

+1

@Jules OPがstl/stdイテレータについて尋ねたので、イテレータがどのようにして質問に関連するかわかりません。 –

6

私はあなたがかなりよく答えを知っている疑いがある、しかし、あなたは、「C++標準ライブラリ:チュートリアルとリファレンス」を見つけて読むことができる場合はとにかく、these charts

+0

私はそれも疑っています – zkunov

関連する問題