Vuelvo a C++ después de estar lejos por un tiempo y de intentar desempolvar el melón viejo.Iteradores en C++ (stl) vs Java, ¿hay alguna diferencia conceptual?
En Java Iterator es una interfaz a un contenedor que tiene métodos: hasNext(), next() y remove(). La presencia de hasNext() significa que tiene el concepto de un límite para el contenedor que se atraviesa.
//with an Iterator
Iterator<String> iter = trees.iterator();
while (iter.hasNext())
{
System.out.println(iter.next());
}
En biblioteca de plantillas estándar de C++, iteradores parecen representar un tipo de datos o una clase de los soportes del operador ++ y el operador == pero tiene ningún concepto de un límite construida en lo que se requiere la comparación antes de avanzar a la siguiente ít. El límite debe ser verificado por el usuario comparando dos iteradores en el caso normal, el segundo iterador es el final del contenedor.
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
}
La parte interesante aquí es que en C++ un puntero es un iterador de una matriz. El STL tomó lo que existía y construyó una convención a su alrededor.
¿Hay alguna otra sutileza en esto que me falta?
Casi lo dijiste tú mismo. En Java, los conceptos de rango e iterador están bastante fusionados. En C++, un iterador no tiene concepto de qué rango de elementos forma parte, y de hecho, puede ser parte de múltiples rangos (de principio a fin, de principio a fin-1, de inicio + de 3 a final, de comienzo a comenzar + 6 y así sucesivamente.) – jalf
"... tratando de desempolvar el melón viejo" - frase brillante. – kevinarpe