14

.begin()C++ ライブラリ配列で、メンバー関数とメンバー関数を使用すると便利な場合はどのような場合.end()ですか?

cplusplus.com での使用例は、配列を反復処理することです。

for ( auto it = myarray.begin(); it != myarray.end(); ++it )

しかし

for (int i = 0; i < myarray.size(); i++)

そのために使用できます。

4

4 に答える 4

26

begin()そしてend()イテレータを返します。イテレーターは、さまざまなタイプのコンテナーにアクセスするための統一された構文を提供します。一見、単純な配列をトラバースするにはやり過ぎに見えるかもしれませんが、同じコードを記述してリストやマップをトラバースできると考えてください。

さまざまなコンテナーへのこの均一なアクセスにより、内部構造を知らなくても、すべてのコンテナーで機能するアルゴリズムを作成できます。最初から最後までの for ループは、はるかに大きなモザイクの最初の部分にすぎません。標準アルゴリズムのリストを調べて、この単純な抽象化の力を理解してください。

于 2015-08-20T18:43:35.240 に答える
10

標準コンテナの要点は、コンテナを変更して同じ構文を使用できることです。リンクされたリストがある場合、最初の構文は引き続き機能します。

また、ポインターと同等です。i はインデックスなので、myarray[i] はそれよりもわずかに遅くなります。

于 2015-08-20T18:40:11.357 に答える
7

他のコンテナとの汎用性に加えてbegin、は範囲endの場合に役立ちます

for (const auto& e : myarray)
于 2015-08-20T18:47:51.553 に答える
0

リンクされたリストを反復処理してみましょう。唯一の効率的な方法は、最後に到達するまで、ある項目から次の項目へと繰り返すことです。

于 2015-08-21T08:58:41.543 に答える