Почему лучше использовать '!= ", чем'<' в векторном цикле? Я просто не вижу разницы.
Почему лучше использовать "! =", Чем "<" в векторном цикле? (С++)
Ответ 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
Другая причина: при переходе на сборку, равное ветки или не-ветки, как правило, намного быстрее, чем ветвь сравнения.