メモ--反復


4反復器~~~~~~~~~~~~~現在の標準STL容器は4種類の異なる反復器を提供している:*iterator*const_iterator   * reverse_iterator   * const_reverse_iterator 4.1できるだけconst_の代わりにiteratorを使うiterator,reverse_iteratorとconst_reverse_iterator ==============================================================================    1. constまたはreverseタイプの反復器の代わりにiteratorをできるだけ使用する理由は、*insertおよびeraseのいくつかのバージョンでiteratorが必要です.これらの関数を呼び出す必要がある場合は、constまたはreverse iteratorsではなくiteratorを生成する必要があります.*const_をiteratorは暗黙的にiteratorに変換する.const_からiteratorがiteratorを生成する技術は一般的に適用されず、効率性が保証されていません.*reverse_からiterator変換によるiteratorは、変換後に相応の調整が必要となる場合がある.4.2 distanceとadvanceでconst_をiteratorがiterator====================================================1.const_の使用キャストはconst_からできませんiteratorをiteratorに変換する.これらのコンテナの場合、iteratorとconst_iteratorは全く違うクラスです.   2. constを手に入れたらiteratorが指向するコンテナにアクセスできるようにすると、対応するiterator 1)を取得する、iteratorをコンテナの開始位置に指向する安全な方法がある. 

  
  
  
  
  1. Container::iterator itr = container.begin(); 

2)distance()でconst_を算出するiteratorのiteratorからのオフセット量. 

  
  
  
  
  1. Container::difference_type offSet = distance<Container::const_iterator>(itr,constItr); 
  2. // distance iterator , distance . 

3)advance()でiteratorを前に移動しconst_iteratorは、容器の開始位置からのずれ量が同じ位置にある. 

  
  
  
  
  1. advance(itr,offSet); 

4.3 reverse_を通過する方法についてiteratorのbaseはiterator==========================================1を得る.reverse_を呼び出すiteratorのbaseメンバー関数は、reverse_で実装する「対応する」iterator*を生成します.iterator riが指摘する位置に新しい要素を挿入し、ri.ベース()が指す位置を挿入すればいいです.Insert操作ではriとri.ベース()は等価でri.ベース()は本当にri対応のiteratorです.*reverse_で実装するにはiterator riが指摘した位置で要素を削除するにはriを削除すべきである.base()の前の要素.削除操作についてはriとri.Base()は等価ではなくri.Base()はri対応のiteratorではありません.        (++ri).ベースこそri対応のiteratorです.4.4 1文字入力が必要な場合はistreambuf_を使用することを考慮するiterator ======================================================    1. istream_iteratorsのデフォルトではスペースを読み取ることはできません.operator>>関数を使用して実際に読み取るため、operator>>関数はデフォルトでスペース2を無視します.istream_iteratorsの効率比istreambuf_iterator非効率istream_iteratorが依存するoperator>>関数はフォーマット入力であり、呼び出すたびに多くの作業をしなければならないことを意味します.