Я возвращаюсь к С++ после некоторого отсутствия и пытаюсь стряхнуть пыль со старой дыни.
В Java Iterator — это интерфейс к контейнеру, имеющему методы: hasNext()
, next()
и remove()
. Наличие hasNext()
означает, что он имеет понятие предела для проходимого контейнера.
//with an Iterator
Iterator<String> iter = trees.iterator();
while (iter.hasNext())
{
System.out.println(iter.next());
}
В стандартной библиотеке шаблонов C++ итераторы представляют тип данных или класс, который поддерживает operator++
и operator==
, но не имеет встроенной концепции ограничения, поэтому перед переходом к следующему элементу требуется сравнение. Предел должен быть проверен пользователем, сравнивающим два итератора в обычном случае, когда второй итератор является концом контейнера.
vector<int> vec;
vector<int>::iterator iter;
// Add some elements to vector
v.push_back(1);
v.push_back(4);
v.push_back(8);
for (iter= v.begin(); iter != v.end(); iter++)
{
cout << *i << " "; //Should output 1 4 8
}
Здесь интересно то, что в C++ указатель является итератором массива. STL взяла то, что уже существовало, и построила вокруг этого соглашение.
Есть ли еще какая-то тонкость, которую я упускаю?