C 11 での非メンバー関数 begin および end 関数の使用
標準コンテナーにはメンバー関数 begin および end が存在しますが、C 11同じ名前の非メンバー関数が導入されました。これらの無料関数は、対応するメンバー関数と同様に動作しますが、いくつかの利点があります。
汎用プログラミング:
非メンバー バージョンでは、次の操作を許可することで汎用プログラミングが可能になります。異なるデータ構造にわたる反復子。たとえば、これらを使用して、メンバーの開始関数と終了関数を持たない標準コンテナと C 配列の両方を処理できます。
オブジェクト タイプからの分離:
無料の関数を使用すると、コードを特定のオブジェクト タイプから分離できます。これは、begin と end の代替実装または非標準実装を持つコンテナを操作するときに有益であり、正確な型を知らなくてもこれらのコンテナを一貫して処理できるようになります。
可読性の向上:
無料の関数は、不要なオブジェクト名を削除することでコードの可読性を向上させることができます。
<code class="cpp">auto i = v.begin(); auto e = v.end();</code>
を記述する代わりに、次のように記述できます。
<code class="cpp">auto i = std::begin(v); auto e = std::end(v);</code>
これは、ループまたは複雑な式で複数のコンテナを処理する場合に特に役立ちます。
拡張性:
無料の関数を簡単に拡張して、カスタム コンテナをサポートできます。 Herb Sutter が述べたように、これはメンバーの begin 関数と end 関数を持たない可能性のある非標準コンテナーにとって有利です。
非メンバー関数を使用する場合:
一般に、次の場合には非メンバー std::begin 関数と std::end 関数を使用することをお勧めします。
以上がメンバー関数上で `std::begin` と `std::end` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。