Я возвращаюсь на C++ после того, как немного ушел, пытаясь согреть старую дыню.Итераторы в C++ (stl) против Java, есть ли концептуальная разница?
В Java Iterator является интерфейсом к контейнеру со следующими методами: hasNext(), next() и remove(). Наличие hasNext() означает, что имеет понятие предела для проходящего контейнера.
//with an Iterator
Iterator<String> iter = trees.iterator();
while (iter.hasNext())
{
System.out.println(iter.next());
}
В стандартной библиотеке шаблонов С ++, итераторы, кажется, представляют собой тип данных или класс опоры оператора ++ и оператор ==, но имеет нет понятия предела построен в так что требуется сравнение, прежде чем перейти к следующему пункт. Предел должен проверяться пользователем, сравнивающим два итератора в нормальном случае, вторым итератором является конец контейнера.
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 взял то, что существовало и строил вокруг него конвенции.
Это какая-то дальнейшая уловка для этого, что мне не хватает?
Вы в значительной степени сказали это сами. В Java концепции диапазона и итератора в значительной степени объединены. В C++ итератор не имеет понятия, какой диапазон элементов он является частью и фактически может быть частью нескольких диапазонов (начинать с конца, начинать с конца-1, начинать + 3 до конца, начинать + 6 и т. д.) – jalf 2008-12-02 19:46:53
«... пытаясь стереть старую дыню» - блестящая фраза. – kevinarpe 2012-05-07 04:27:07