私は、標準ではSTLコンテナを実装する必要があるとは言いませんが、むしろSTLコンテナがそれぞれの要件を満たすことを要求しています。STLはどのようにコンテナの終わりを知っていますか?
しかし、STLオーダーコンテナは、通常、red–black treesとして実装されていることが広く知られています。
std::set
またはstd::map
の要素を、それぞれのイテレータを使用して、またはC++ 11以降では巡回ループを使用して繰り返し処理できます。
しかし私が困惑しているのは、STLの注文したコンテナが「終了」を "知っている"ということです。または、別の言い方をすると、それらはツリーとして実装されているので、 コンテナの最後がどのように実装されているのか、それとも が実装できますか?
私は標準が§23.2.1/ C一般的なコンテナの要件を規定することを知っている(強調鉱山):
)は(開始 コンテナ内の最初の要素を参照する反復子を返します。 end()は、コンテナの終わりの値 であるイテレータを返します。コンテナが空の場合、begin()== end();
OK、連続したコンテナの場合、これは簡単ですが、この「過去の終わり」をツリーでどのように実現できるのでしょうか?
"過去の最後"は論理的な概念であり、物理的な概念ではないことを理解してください。これは、文字通り最後の有効なエントリを通過したときに取得するイテレータを意味しますが、そのイテレータの内部コンテンツは何でもかまいません。 –
breadth-firstやdepth-firstのような終端ツリートラバーサルからのnext()とend()の自然な概念があります。したがって、それぞれのイテレーターについて概念的に特別なものはありません。 –
@ MarkRansom十分に公正、それは論理的な概念です。しかし、どのようにそのような論理的な概念を実装するのですか?私はコードで意味します。 – 101010