Основной итератор модель STL C++ s в основном состоит из „дать мне деталь в текущей позиции“ оператор *
, а „перейти к следующему пункту“ оператор ++
и предикат ==
/!=
который используется для проверки (большую часть времени) против конечного итератора. Конечно, есть и другие итераторы с произвольным доступом, но самый простой выглядит так, как описано выше.C++ Итератор модель по сравнению с моделью Java итератора
Напротив, Java имеет next()
и hasNext()
. Следующий пример примерно эквивалентен использованию ++
, а затем *
. hasNext()
- это что-то вроде сравнения с концом. Почему Java не приняла модель C++ (разумеется, у нее нет перегрузки оператора, поэтому она должна имитировать функции)? В частности, почему сравнение с конечным итератором упало для метода hasNext()
? Мне часто бывает сложнее записывать итераторы в Java, чем в C++, потому что логика, стоящая за next()
и hasNext()
, часто сложнее, чем у операторов C++.
см. этот пост http://stackoverflow.com/questions/56347/iterators-in-c-stl-vs-java-is-there-a-conceptual-difference и http: // stackoverflow.com/questions/882855/what-is-the-difference-between-iterators-in-java-and-c – taocp
Различные философии - Java была разработана для простоты, в то время как итераторы STL структурированы после C-указателей. –
@Scott Jones: Я не вижу здесь простоты ... – gexicide