31 agosto 2011

Librería estándar (STL) y Vector

vectorx¿Para qué reinventar la rueda si a alguien ya se le ocurrió?  Es mejor usarla, ¿o no?  Este mismo argumento aplica para los programadores: ¿para qué programar cosas que ya están hechas de forma muy eficiente por otros programadores?  Sería una pérdida de tiempo.
Por eso los programadores podemos aprovechar la Standard Template Library, conocido como STL, o librería estándar de plantillas (se oye pésimo en español, pero esa es la traducción).  El STL contiene varios contenedores (valga la redundancia) que te permiten hacer diferentes cosas.  Hay contenedores para arreglos dinámicos (vector), colas (queue), heap (heap), listas ligadas (list), árboles (set), pilas (stack), etc.  Claro que cada uno de estos contiene un chorro de algoritmos que facilitan la vida para usarlos, manipularlos, llenarlos y casi cualquier otra cosa que termine con “arlos”, jeje.
En este artículo voy a hablar un poco sobre el uso del contenedor vector (tocayo del memorable malvado de la película “Mi villano favorito”, que aparece en la imagen de este mensaje).  Básicamente es un arreglo dinámico, es decir, un arreglo que puede cambiar de tamaño (uno de los inconvenientes de los arreglos comunes y corrientes).
Usar el contenedor vector tiene muchas ventajas sobre los arreglos, por ejemplo:
  • Los vectores pueden crecer y los arreglos no.
  • Los vectores pueden usar algoritmos programados en el STL.  Los arreglos no.
Aunque no todo es pura dulzura porque hay también algunas desventajas en el uso de vectores:
  • Necesitan más memoria.
  • Cuando los vectores crecen mucho, disminuya el rendimiento.
  • Los vectores no están disponibles en todas las plataformas.

Antes de empezar…

Antes que nada, hay que incluir la librería que contiene al contenedor (valga la redundancia) vector.  Como está en el namespace std, no hace falta incluir el “.h”.
#include <vector>

Declarar un vector

Para declarar un vector, la sintaxis básica es la siguiente:
vector<tipo_de_dato> nombre_de_variable;
Por ejemplo, si quiero declarar un vector de tipo string con nombre inventario, escribo:
vector<string> inventario;
También puedo decirle que comience con 10 elementos en el vector así:
vector<string> inventario(10);
Y si quiero inicializar los 10 elementos con la cadena “Nada”, escribiría:
vector<string> inventario(10,”Nada”);
Finalmente, si quiero inicializar mi vector con el contenido de un arreglo (en este ejemplo, se llama Arr), escribiría:
vector<string> inventario(Arr);

Funciones

Las funciones más usuales de este contenedor son las siguientes:
  • push_back – agrega un elemento al final del vector.
  • size – devuelve el número de elementos que están almacenados en el vector.
  • pop_back – elimina el último elemento del vector.  esto hace que el vector cambie de tamaño (se hace más pequeño).
  • clear – elimina todos los elementos del vector.
  • empty – Devuelve un valor de verdadero si el vector carece de elementos.

Ejemplo que usa el contenedor Vector

Aquí les presento código hecho en Visual C++ 2010.  Es un ejemplo simple que pone en práctica todo lo que escribí con anterioridad.  Si necesitas, aquí puedes descargar un archivo comprimido con todos los archivos y carpetas que conforman la solución.
CódigoVector

Atracciones futuras

Para que puedas trabajar mejor con vectores y que se puedan aprovechar mejor, es importante hablar de iterators (¿iteradores?).  De éstos hablaré en mi próximo post de C++.

Referencias para mayor información

Si quieres saber más, te recomiendo el sitio de GabaWiki sobre STL Vector.  Abajo pongo la referencia a un libro que me ayudó a crear este post.
La imagen de Vector que aparece al principio es cortesía de USA Today.
Publicar un comentario
Related Posts Plugin for WordPress, Blogger...