web-dev-qa-db-ja.com

ベクトル反復子<または!=

forループ内のベクトルイテレータについて話すときに、!=<に大きな違いがあるかどうかを理解してくれる人はいますか?

つまり、!=<のどちらを使用しても、結果は同じになるはずです。

for (vector<int>::iterator i = vec.begin(); i != vec.end(); i++)
    // DO STUFF
for (vector<int>::iterator i = vec.begin(); i < vec.end(); i++)
    // DO STUFF

最も一般的な方法は!=を使用することですが、<を使用すると大きな問題になりますか?

30

標準ライブラリ(コンテナ、イテレータ、アルゴリズム)のSTL部分の背後にある全体の哲学は、コンテナ間のプログラム上の区別を最小限にすることです。それらは異なる特性を示しますが、それらをプログラムする方法は可能な限り類似するように設計されています。

これにより、それらを学習しやすくなり、使用しやすくなります一般的に。つまり、1つgeneric関数(またはアルゴリズム)を記述し、それを他のコンテナー(またはできるだけ多く)に適用することができます。

それを念頭に置いて、可能な限りすべてのコンテナとイテレータに共通の構文を使用することは有益です

一部のコンテナのイテレータのみが<比較を許可しますが、allコンテナのイテレータは!=を受け入れます。そのため、一貫性の問題として、またコードを別のコンテナに簡単に移植できるようにするために、常に!=を使用することをお勧めします。

10
Galik

違いはありますが、std::vectorには違いがありません。すべてのイテレータは同等であるため、!=は常に機能します。 std::vectorがそうであるように、ランダムアクセスイテレータのみが比較可能なものよりも小さいので、あなたの場合、それは大きな問題にはなりません。

9
Demosthenes