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
最も一般的な方法は!=
を使用することですが、<
を使用すると大きな問題になりますか?
標準ライブラリ(コンテナ、イテレータ、アルゴリズム)のSTL
部分の背後にある全体の哲学は、コンテナ間のプログラム上の区別を最小限にすることです。それらは異なる特性を示しますが、それらをプログラムする方法は可能な限り類似するように設計されています。
これにより、それらを学習しやすくなり、使用しやすくなります一般的に。つまり、1つgeneric関数(またはアルゴリズム)を記述し、それを他のコンテナー(またはできるだけ多く)に適用することができます。
それを念頭に置いて、可能な限りすべてのコンテナとイテレータに共通の構文を使用することは有益です。
一部のコンテナのイテレータのみが<
比較を許可しますが、allコンテナのイテレータは!=
を受け入れます。そのため、一貫性の問題として、またコードを別のコンテナに簡単に移植できるようにするために、常に!=
を使用することをお勧めします。
違いはありますが、std::vector
には違いがありません。すべてのイテレータは同等であるため、!=
は常に機能します。 std::vector
がそうであるように、ランダムアクセスイテレータのみが比較可能なものよりも小さいので、あなたの場合、それは大きな問題にはなりません。