ホームページ >バックエンド開発 >C++ >標準範囲でクローズドインターバル [begin, end] の代わりにハーフオープンインターバル [begin, end) を使用するのはなぜですか?

標準範囲でクローズドインターバル [begin, end] の代わりにハーフオープンインターバル [begin, end) を使用するのはなぜですか?

DDD
DDDオリジナル
2024-12-21 00:19:11161ブラウズ

Why Do Standard Ranges Use a Half-Open Interval [begin, end) Instead of a Closed Interval [begin, end]?

標準の範囲が [begin, end] ではなく [begin, end) である理由

標準では end()関数は、実際の範囲の終わりではなく、範囲の終わりを過ぎたものとして定義されます。この決定は議論の対象となっており、それを擁護するためにいくつかの説得力のある理由が提示されています。

ダイクストラが雄弁に述べたように、主要な議論の 1 つは、差として範囲のサイズを計算する単純さを中心にしています。終わりと始まりの間。さらに、特にシーケンスが空のシーケンスに縮退するシナリオでは、下限 (begin) を含めることがより自然であると考えられます。逆に、下限を除外すると、「先頭の 1 つ前」センチネル値の導入が必要になり、不必要な複雑さが生じます。

[begin, end) 規則は、ネストされたまたは範囲ベースの構造への呼び出しを繰り返し、自然に連鎖できるようにしました。対照的に、二重に閉じられた範囲は、off-by-one エラーと、煩雑でノイズの多いコードにつながります。たとえば、[n0, n1)[n のパーティションを考えてみましょう。 1n2)[n2,n3).

同様に、標準の反復ループ (it = begin; it != end;それ) 終了時間と開始時間を実行します。特に空の範囲を扱う場合、両端を含む場合、これははるかに読みにくくなります。

最後に、ゼロから始まるカウント規則は、[begin, end) アプローチとよく一致します。 N 個の要素の範囲 (配列の要素など) が指定された場合、ゼロが自然な「始まり」として機能し、範囲を [0, N) として表すことができ、不必要なオフセットや修正を回避できます。

結論として、範囲の [begin, end) 規則は、慎重に検討された設計上の選択の結果です。これにより、範囲サイズの計算の簡素化、空のシーケンスを処理する際の自然さ、ネストされた範囲ベースの構造の処理の容易さ、およびゼロベースのカウントとの調整が保証されます。

以上が標準範囲でクローズドインターバル [begin, end] の代わりにハーフオープンインターバル [begin, end) を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。