Programación en C++/Biblioteca Estándar de Plantillas/Vectores
Editores:
Oscar E. Palacios
← Biblioteca Estándar de Plantillas |
C++ vector estándar
editarLa estructura de la clase vector está pensada para operar con arreglos unidimensionales de datos, los elementos de un vector pueden ser manipulados de la misma manera en que se hace con las estructuras de arreglos (arrays) tradicionales en C, C++; es decir, los componentes de un vector pueden ser referenciados a través de un índice numérico, de la misma manera que en un arreglo cualquiera. Por ejemplo, si A es un objeto, de vector, entonces la instrucción: A[0]; se refiere al componente 0 (primer elemento) de A. El resultado de todo esto es que usted puede navegar o iterar a través de los componentes de una lista haciendo uso de índices, o si lo prefiere a través de punteros iteradores. Si usted desea ver una lista completa de los métodos asociados a la clase vector siga éste enlace ( Tabla de métodos ), pero recuerde que no todos ellos serán cubiertos aquí.
Para comenzar, vamos a presentar un ejemplo sencillo, el cual consistirá en crear un vector de números de punto flotante. Al vector creado le agregaremos una serie de valores los cuales posteriormente serán sumados y desplegados en la pantalla del monitor. Para nuestro ejemplo vamos a emplear los métodos push_back (para agregar los números), size (para obtener el número de componentes en el vector), e iteraremos por medio de índices numéricos. Veamos.
// Demostracion del uso de un vector
// probado en: Dev-C++ 4.9.9.2
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
char buffer[80];
double suma;
vector<double> v;
v.push_back(999.25);
v.push_back(888.50);
v.push_back(777.25);
suma = 0;
for(int i = 0; i < v.size(); i++)
{
suma += v[i];
sprintf(buffer, "%10.2f", v[i]);
cout << buffer << endl;
}
cout << "----------" << endl;
sprintf(buffer, "%10.2f", suma);
cout << buffer << endl;
cin.get();
return EXIT_SUCCESS;
}
De acuerdo con la referencia de ayuda de Dev-C++ es más seguro emplear el método at() en lugar el eperador [] para leer o escribir componentes en un vector, ya que at() no permite índices fuera del vector, y el operador [] sí. Por ejemplo, si V es un vector cuyo número de componentes es de 3, entonces la instrucción V[5]; es sumamente peligrosa ya que el índice 5 está fuera del rango (0 a 2 ) de los componentes de V; por otro lado, la instrucción V.at(5); también está fuera de rango, salvo que at() en lugar de leer o escribir el componente referenciado lanzará (throw) un error de excepción, de tal manera que en el programa se pueda controlar la condición de error por medio de un catch. El método at() actúa de manera parecida al operador [], y para ver un ejemplo de su uso compile y ejecute el siguiente programa.
// Demostracion del uso del método at()
// probado en: Dev-C++ 4.9.9.2
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<char> v;
// llenamos el vector v con valores desde la 'A' hasta la 'Z'
for (int x = 'A'; x <= 'Z'; x++) v.push_back(x);
// despliegue de los elementos del vector v
// mediante el operador [].
for(int i = 0; i < v.size(); i++)
cout << v[i] << " ";
// despliegue de los elementos del vector v
// mediante el método at().
for(int i = 0; i < v.size(); i++)
cout << v.at(i) << " ";
cout << endl;
cin.get();
return EXIT_SUCCESS;
}
Colas de doble fin ( deque )
editarLas Colas de doble fin son como los vectores, excepto que en éstas la inserción y borrado de elementos es más rápida, además de permitir insertar y borrar elementos al principio así como al final del contenedor. La mayoría de los métodos aplicables a la clase vector son aplicables a la clase deque, pero la clase deque posee ademas los métodos push_front y pop_front para insertar y borrar elementos al principio. En orden de ver un ejemplo modificaremos el programa anterior, en el mismo usaremos una clase deque.
// Demostracion de la clase deque.
// probado en: Dev-C++ 4.9.9.2
#include <cstdlib>
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char *argv[])
{
deque<char> v;
char x;
// Metemos en la cola v valores desde la 'A' hasta la 'Z'
// mediante el método push_back.
for (x = 'A'; x <= 'Z'; x++) v.push_back(x);
// Metemos en la cola v valores desde la '0' hasta la '9'
// mediante el método push_front.
for (x = 0; x <= 9; x++) v.push_front(x);
// despliegue de los elementos de la cola
// mediante el operador [].
for(int i = 0; i < v.size(); i++)
cout << v[i] << " ";
// despliegue de los elementos del vector v
// mediante el método at().
for(int i = 0; i < v.size(); i++)
cout << v.at(i) << " ";
cout << endl;
cin.get();
return EXIT_SUCCESS;
}
Tabla de métodos
editarassign | asigna los elementos al vector |
at | devuelve el elemento de una posición específica |
back | devuelve una referencia al último elemento del vector |
begin | devuelve un iterador al principio del vector |
capacity | devuelve el número de elementos que pueden ser contenidos por el vector |
clear | elimina todos los elementos del vector |
empty | true si el vector está vacio |
end | devuelve un iterador al final del vector |
erase | elimina elementos del vector |
front | regresa una referencia al primer componente del vector |
insert | insertar componentes en el vector |
max_size | regresa el número máximo de elementos soportados por el vector |
pop_back | elimina el último elemento del vector |
push_back | añade un elemento al final del vector |
rbegin | devuelve un reverse_iterator hacia el final del vector |
rend | devuelve un reverse_iterator hacia el inicio del vector |
reserve | establece la capacidad mínima del vector |
resize | cambia el tamaño del vector |
size | devuelve el número de componentes en el vector |
swap | intercambia el contenido de un vector con el de otro |
← Librería Estándar de Plantillas |