Vectores e Iteradores en C++

Vamos a hablar un poco de vectores e iteradores en C++. Como derivado de C es comun que muchos desarrolladores a pesar de conocerlos les cueste adaptarse al uso de iteradores.

Contenedores, los vectores:

Un contenedor de la STL es una clase genérica que puede instanciarse para representar diversos tipos de objetos. Esta clase incluye ciertas operaciones (muy básicas) sobre los objetos de su tipo;  estas operaciones están representadas por funciones-miembro, incluyendo constructores y funciones-operador, que son a su vez funciones genéricas.

De su propio nombre (“Containers”) podemos deducir que su misión principal es funcionar como estructuras de datos, y en este sentido podemos decir que entre sus funcionalidades más destacadas se encuentran la gestión del espacio de almacenamiento necesario lo que de por si es una gran ventaja ya que el programador no tiene que preocuparse de asignar o liberar memoria para los objetos creados.

Veamos uso de los contenedores mediante un sencillo ejemplo, si tenemos que manejar un conjunto de enteros, puede utilizarse una matriz de enteros, pero ya hemos señalado que esta estructura nos obliga a conocer de antemano la cantidad de datos a almacenar (el tamaño de la matriz).

Una alternativa es utilizar como “contenedor” para nuestros enteros una clase genérica de la STL denominada vector.

Como se puede observa en la linea 8 definimos un vector de tipo int al que llamamos enteros.

Teniendo ya el objeto disponible vamos a usar uno de sus métodos o funciones miembro “push_back” para ir cargando el vector con valores del tipo que fue definido.

Luego mediante cout podemos acceder a los valores almacenados en el vector de la misma manera que lo haríamos en un array, es decir a travez de su indice.

¿Sencillo no? Y lo mejor de todo es que nos despreocupamos completamente de la dimensión de la colección y el manejo de memoria.

Iteradores:

Pero vamos un poco mas alla con C++, veamos como podemos usar un iterador para recorrer nuestro vector.

El concepto de iterador es fundamental para entender las clases de contenedores y algoritmos asociados inclusos en la Librería Estándar de Plantillas de C++.   En realidad los algoritmos son funciones globales que aceptan iteradores como argumentos, y a través de ellos puedan operar sobre los elementos del contenedor.

Un iterador es una especie de puntero que es utilizado por un algoritmo para recorrer los elementos almacenados en un contenedor. Dado que los distintos algoritmos necesitan recorrer los contenedores de diversas maneras para realizar diversas operaciones, y los contenedores deben ser accedidos de formas distintas, existen diferentes tipos de iteradores. Cada contenedor de la Librería Estándar puede generar un iterador con funcionalidad adecuada a la técnica de almacenamiento que utiliza. Es precisamente el tipo de iterador requerido como argumento, lo que distingue qué algoritmos STL pueden ser utilizados con cada clase de contenedor. Por ejemplo, si un contenedor solo dispone de iteradores de acceso secuencial, no pueden utilizarse con algoritmos que exijan iteradores de acceso aleatorio.

Pero vamos a un ejemplo que es la mejor forma de entenderlos:

Acá incorporamos un iterador, en la linea 9 declaramos un iterador a un vector de enteros.

Mas abajo podemos observar que en la linea 13 apuntamos con el iterador al primer elemento-ítem de nuestro vector.

Luego en la linea 14, 15 y 16 podemos ver como accedemos los enteros almacenados en el vector mediante los iteradores, observe que para acceder al valor se usa “*” como lo hacemos con punteros.

Pongamos atención ahora a la construcción de las lineas 17-19, este es el uso común y adecuado que se hace de los iteradores para recorrer una colección, en este caso mediante “for” que es en esencia un iterador.

Observemos que es este ultimo ejemplo hemos utilizado los métodos .begin() u .end() para denotar los limites de acción de for. También debemos notar que usamos el operador de  auto-incremento ++ para el iterador.

Bueno queridos lecoter espero que les haya gustado.






Comments are Closed