C++ ベクターを 'for' ループを使用して反復処理する 質問する

C++ ベクターを 'for' ループを使用して反復処理する 質問する

私は C++ 言語の初心者です。ベクターを使い始めたのですが、インデックスを介してベクターを反復処理するすべてのコードで、ループの最初のパラメータforが常にベクターに基づくものであることに気付きました。Java では、ArrayList を使用して次のような操作を行うことがあります。

for(int i=0; i < vector.size(); i++){
   vector[i].doSomething();
}

C++ でこれが見られないのは何か理由があるのでしょうか? これは悪い習慣なのでしょうか?

ベストアンサー1

そのような実践が見られない理由は非常に主観的であり、明確な答えはありません。なぜなら、iteratorスタイル コードではなく、あなたが言及した方法を使用するコードをたくさん見てきたからです。

vector.size()一部のプログラマーがループの方法を考慮しない理由としては、次のことが考えられます。

  1. size()ループ条件で毎回呼び出すことに神経質になる(つまりfor(... ; i < v.size(); ...)、しかし、それは問題ではないか、簡単に修正できる。
  2. ループ自体std::for_each()よりも優先するfor
  3. 後でコンテナを からstd::vector他のコンテナ (例 ) にmap変更するとlist、ループメカニズムの変更も必要になります。これは、すべてのコンテナがsize()ループのスタイル (つまりstd::map)をサポートしているわけではないためです。

C++11 は、コンテナを反復処理するための優れた機能を提供します。これは、「範囲ベースの 'for' ループ」(または Java では「拡張 'for' ループ」) と呼ばれます。

少しのコードで、全体を走査することができます (これは必須です!) std::vector:

vector<int> vi;
...
for(const int& i : vi) 
  cout << "i = " << i << endl;

おすすめ記事