2017-01-24 6 views
0

入力イテレータで2回目のコンテナを横断すると、同じ順序で値が移動することは保証されません。また、入力イテレータがインクリメントされた後その前の価値が依然として逆参照されるという保証はありません。入力イテレータでコンテナを2回移動する

又は

アンInputIteratorは尖った-に素子から読み出すことができるイテレータです。 InputIteratorは、シングルパスアルゴリズムの有効性のみを保証します.IntireIteratorが増分されると、以前の値のすべてのコピーが無効になる可能性があります。

なぜ以前の値のすべてのコピーが無効になる可能性がありますか?これらの声明の概念は何ですか?

+3

'std :: istream_iterator'について' std :: cin'と考えてください – Jarod42

+0

あなたのソースに名前を付けてください!あなたはなぜ彼らの名前に言及せずに本から引用しますか? –

答えて

0

あなたのイテレータは、現在指している要素のみを読み取ることができ、前または次の要素についての知識はありません。

Iter0 = Iter1; 
Iter1++; 

をインクリメントした後、イテレータのあなたのセットは次のようになります:

   Item1 ---> Item2 ---> Item3 ---> Item4 
Iter0 ------------------↑   ↑ 
Iter1------------------------------ˈ 
std::list<T>

  Item1 ---> Item2 ---> Item3 ---> Item4 
Iter0 ----↑   ↑ 
Iter1----------------ˈ 

を指す2つのイテレータは、次のようにこれらをインクリメント想像したの

考えます

前の値Iter1はsです。 Iter0に渡されるので、常にそれはIter1の前の要素を指しています。

ここで、Item2の削除を実行するとします。

   Item1 ---> Item3 ---> Item4 
Iter0 -???    ↑ 
Iter1-------------------ˈ 

Iter1まだItem3に有効で、ポイントです。

Iter0以前の値Iter1は有効でなくなり、「なし」(このイテレータの逆参照が未定義の動作とみなされることを意味します)を指します。

関連する問題