Почему лучше использовать "! =", Чем "<" в векторном цикле? (С++)

Почему лучше использовать '!= ", чем'<' в векторном цикле? Я просто не вижу разницы.

Ответ 1

Поскольку вы используете итераторы, и это заставит цикл выглядеть точно так же, как и другие контейнеры, если вы решите переключиться на другие типы контейнеров, такие как set, list, unordered_set и т.д., где < не имеет значения.

Ответ 2

Я предполагаю, что вы имеете в виду использование !=vector.end(), а не <vector.size(), поскольку это не было ясно из вашего вопроса.

Одна из причин, почему предпочтительнее версия end(), - это то, что вы действительно пытаетесь сделать, это проверить, достигли ли вы цели.

Идиома для выполнения подобных проверок для массивов в C заключалась в том, чтобы проверить индекс по сравнению с размером, но это "унаследованное" поведение. In был затем распространен в мире Java (как < array.length) до тех пор, пока люди не осознали, что массивы являются злыми и что Java, наконец, поддерживает дженерики. Однако в С++ нет причин использовать эту идиому, когда у вас есть хороший класс коллекции, такой как вектор для работы. Это более читаемо и более удобно. Например, это облегчает переход на другие коллекции, если это необходимо, поскольку вы все еще говорите об этом.

Ответ 3

Некоторые типы итераторов не поддерживают оператор меньшего размера - они поддерживают только оператор неравенства. Вот почему вы часто видите, что оператор, который меньше, чем оператор, оставил.

Ответ 4

В общем, мне нравится ставить такой код в функции шаблона, аналогичной алгоритмам STL, так что они агностически связаны с тем, что лежит в основе содержащего.

Так как < имеет смысл только для векторов, он будет плохо соответствовать общей функции. Если вы используете <, вы запираетесь на использование вектора.

Ответ 5

Возможно, программист вспомнил оборонный кодовый трюк: в случае, если что-то пойдет во время выполнения цикла, а индекс/указатель/итератор проходит мимо конца, цикл будет спокойно останавливаться при проверке '<' оставляя ошибку незаметно. С!= Может быть хаос и сбой, поскольку цикл продолжается с плохими данными, позволяя более раннее исправление.

Ответ 6

Для векторных итераторов это не имеет никакого значения. В общем случае итераторы могут не поддерживать '<' просто '==' и '! ='. Следовательно, наиболее общий способ проверки, если вы не достигли конца коллекции, - проверить, является ли итератор!= Container.end()

Ответ 7

Другая причина: при переходе на сборку, равное ветки или не-ветки, как правило, намного быстрее, чем ветвь сравнения.