[解決済み】標準のイテレータの範囲が[begin, end]ではなく、[begin, end]になっているのはなぜですか?]
質問
なぜ、規格では
end()
を、実際の末尾ではなく、末尾を1つ過ぎたところにあるとしていますか?
どのように解決するのですか?
簡単に言えば、一番良い議論は、次のようなものである。 ダイクストラ自身 :
-
範囲の大きさを単純な差にしたい場合 終了 - 開始 ;
-
シーケンスが空のものに縮退している場合,下界を含む方がより自然であり,また,代替案( を除く 下界)では、quot;one-before-the-begin"のセンチネル値の存在が必要となります。
なぜ1ではなく0からカウントを始めるのか、その理由を説明する必要がありますが、それはあなたの質問の一部ではありません。
begin, end)規約の背後にある知恵は、範囲ベースの構造への複数の入れ子または反復呼び出しを扱う何らかのアルゴリズムがある場合、何度も何度も報われ、自然に連鎖します。これに対して、二重に閉じた範囲を使用すると、1つ違いのコードが発生し、非常に不快でノイズの多いコードになります。例えば、パーティション [
n
<サブ
0
,
n
<サブ
1
)[
n
<サブ
1
,
n
<サブ
2
)[
n
<サブ
2
,
n
<サブ
3
). もう一つの例は、標準的な反復ループである
for (it = begin; it != end; ++it)
を実行します。
end - begin
回です。もし両端が包括的であれば、対応するコードはずっと読みにくくなります。また、空の範囲をどう扱うか想像してみてください。
最後に、なぜカウントをゼロから始めるべきなのか、その理由もきちんと説明できます。先ほど確立した範囲の半開きの規則では、もしあなたが N の要素(例えば配列のメンバを列挙する場合)は、0が自然なquot;begin"であり、その範囲は[0.A]と書くことができます。 N ) を、厄介なオフセットや補正をせずに使用することができます。
一言で言えば、「数字が見えない」ということです。
1
範囲ベースのアルゴリズムのあらゆる場所で、[begin, end]規則の直接的な結果であり、動機となるものです。
関連
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み】C++11で非メンバーのbeginとend関数を使うのはなぜ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件