La Clase Vector y sus Métodos más Importantes en C++

Uno de los grandes aciertos cuando se creó C++ fue introducir esta plantilla, ya que nos permite un manejo más dinámico de arreglos o arrays, afortunadamente este ”tipo de dato” no se limita solo a arreglos de tipos primitivos sino que nos permite crear y manipular arreglos de tipos predefinidos o también definidos por el usuario.

El tipo vector se encuentra declarado en el fichero de cabecera

<vector>

y cuya plantilla se encuentra definida en el espacio de nombres std, la sintaxis es la siguiente:


vector<tipo_de_dato> nombre_vector(tamaño,valor_inicial);

Donde en primer lugar se inicia la declaración con la palabra ‘vector’ seguida entre ‘<>‘ por el tipo de dato del cual queremos que esté compuesto el array, posteriormente entre paréntesis tenemos dos valores (ambos opcionales) uno de ellos ”tamaño” el cual indica la longitud del vector que recién se está creando, esto, aunque es opcional es bastante útil ya que la ejecución se hace más óptima, si se da por adelantado la longitud máxima que puede llegar a usar dicho vector en memoria entonces menos desplazamientos en memoria dinámica se tendrán que hacer en medio de la ejecución (tengan en cuenta esto para hacer más óptimo su código). El segundo parámetro, también opcional es ”valor_inicial” cómo su nombre lo indica lodos las posiciones del vector que se ha creado será inicializadas a ese valor.

Como ejemplo crearemos dos vectores de tipo double, uno de ellos sin tamaño inicial ni valor que inicializa sus componentes, y al siguiente se le dará un tamaño de 5, indicando así que su longitud o número de componentes será 5 y a su vez inicializaremos todas sus componentes al valor 3.1415, finalmente haciendo uso de un ciclo for() se mostrarán sus componentes.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    //vector sin inicializar ni indicar tamaño
    vector<double> arreglo_1;

    //vector con tamaño 5 y componentes iniclizadas
    vector<double> arreglo_2(5,3.1415);

    //mostrar las componentes con un ciclo
    for(unsigned int i=0;i<arreglo_2.size();i++)
    { //con el mtodo .size() se obtiene el tamaño del vector
        cout<<arreglo_2[i]<<endl;
    }
    cout<<endl<<endl<<endl;
    return 0;
}

En nuestro caso, el nombre del proyecto fue ”argumentos” por lo tanto en la terminal el archivo ejecuable lleva este mismo nombre, al ejecutar el código anterior el resultado arrojado es el siguiente:

cap1

Cómo se puede observar, el número 3.1415 fue con el que inicializamos todas las componentes del vector, y cómo se mencionó que el tamaño de este se definió a 5 componentes entonces el ciclo for() nos muestra el valor 3.1415 5 veces, con lo que comprobamos el correcto funcionamiento.

Métodos más usados con el tipo Vector.

Copiar el contenido entre vectores.

Lo que más nos favorece al trabajar con el tipo Vector es que todo ocurre en memoria dinámica, lo que nos da flexibilidad para agregar, eliminar y modificar componentes y no menos importante, redimencinar nuestros arrays como veremos más adelante, pero ¿cómo copiar un vector en otro? esta operación es tan sencilla cómo simplemente igualar los vectores. Por ejemplo: sean A un vector de 20 elementos de tipo entero inicializados a 9, entonces para copiar el vector a en un vector B solo basta igualarlos, cómo se ilustra en el siguiente ejemplo:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 20 elementos int inicializados a 9
vector<int> A(20,9);
//vector B sin inicializar
vector<int> B;

//copiamos el contenido de A en B
B=A;

return 0;
}

Conocer la longitud del Vector

Para conocer el tamaño o longitud de nuestro vector, debemos invocar su método .size(), este nos retornará un entero sin signo (unsigned int)  con el número de elementos presentes en ese momento en el array:


#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 20 elementos int iniclizados a 9
vector<int> A(20,9);
//declaramos un entero para almacenar el tamaño
int num_elementos;
//usamos el mtodo .size() que nos retornará la
//cantidad de elementos en A, que es 20
num_elementos=A.size();
//mostramos el numero que nos retornó el método .size()
// el valor que mostrará es 20
cout<<num_elementos<<endl;

return 0;
}

Modificar el tamaño de nuestro vector

Para modificar el tamaño de nuestro elemento vector haremos uso del método .resize(), el cual recibe un solo parámetro, un entero no negativo indicado cual es la nueva longitud, es decir, si en el siguiente ejemplo tenemos un vector de 20 elementos y queremos que su tamaño se modifique a solo 5, entonces los elementos almacenados desde la posición 1 a la 5 permanecerá inalterados, mientras que el resto se perderá en la operación, esto se puede comprobar al llamar al método .size() para conocer su nueva longitud.


#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 20 elementos int iniclizados a 9
vector<int> A(20,9);

cout<<"El tamano anterior era: "<<A.size()<<endl;
//su tamaño es 20 pero lo cambiaremos a 5
A.resize(5);
//ahora su tamano es
cout<<"El nuevo tamano es: "<<A.size()<<endl;

return 0;
}

El resultado es:

cap

Acceso a los elementos.

La forma en que tenemos acceso a los elementos se mantiene con forme se hacia en versiones anteriores del lenguaje C es decir, solo poniendo el índice del elemento al que queremos acceder entre corchetes [índice], cabe recordar que la numeración va desde el índice cero, así que el elemento 1 se encontraría en la posición cero (0) de nuestro vector, en el siguiente ejemplo accedemos al tercer (3) elemento del vector A que contiene 20 elementos inicializados a 9.


#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 20 elementos int iniclizados a 9
vector<int> A(20,9);

//se accede al tercer elemento, en la posición 2 del vector
cout<<"El tercer elemento del vector es: "<<A[2]<<endl;

return 0;
}

 

Eliminar elementos de nuestro tipo Vector.

Como mencionamos más arriba, una de las ventajas con el tipo Vector es la facilidad con que podemos manipular, modificar, eliminar e insertar elementos en nuestros arrays, para eliminar un elementos invocamos al método .erase() el cual recibe dos parámetros de tipo entero, indicando las posiciones entre las cuales se eliminarán elementos, es decir, si tengo un vector de 10 posiciones y quiero eliminar los elementos desde la posiciones 3 a la 6 entonces llamó el método .erase() como se ve a continuación.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 10 elementos sin inicializar
vector<int> A(10);
//inicializamos todos los elementos en este ciclo
for(int i=0;i<10;i++)
{
A[i]=i+1;
}
//se muetra la longitud antes del borrado
cout<<"la longitud total es: "<<A.size()<<endl;

//borramos los elemetos entre las posciones 3 a 6
A.erase(A.begin()+3,A.begin()+6);

//mostramos la nueva longitud
cout<<"La nueva longitud es: "<<A.size()<<endl;

//mostramos el nuevo orden de los elementos
for(int i=0;i<A.size();i++)
cout<<A[i]<<" ";

cout<<endl<<endl;

return 0;
}

Con el método .begin() que vemos en la linea 19 obtenemos el ”iterador” de la primera posición del vector ya que el método .erase() no recibe números enteros sino ‘posiciones’ (iteradores), es lo único ‘extraño que debemos tener en cuenta para esta operación.

Insertar elementos en nuestro tipo Vector.

El método .push_back(nuevo_elemento) recibe como parámetro un elemento del mismo tipo del que se compone nuestro vector, es decir que si el vector es de tipo int entonces .push_back() deberá recibir como argumento un tipo int para agregar al final de nuestro vector.

El método .insert() nos permite añadir elementos en cualquier parte del vector que le indiquemos, recibe cómo parámetros un iterador con la posición del vector en la que queremos insertar el nuevo elemento y como segundo parámetro el nuevo elemento que queremos agregar, por ejemplo, suponemos que tenemos un Vector A de 5 elementos de tipo int inicializados con 9, y en la posición 3 (contando desde cero) queremos añadir el número 2, entonces el código quería:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 10 elementos inicializados a 9
vector<int> A(5,9);

//insertamos el valor 2 en la tercera posición del array
A.insert(A.begin()+3,2);

//mostramos el nuevo vector con un 2 que se insertó antes
for(unsigned int i=0;i<A.size();i++)
cout<<A[i]<<"  ";

cout<<endl<<endl;
return 0;
}

Dando cómo resultado, recuerden, posición 3 contando desde 0:

cap

Este método al igual que los demás, está sobrecargado, es decir, puede ser llamado con diferentes parámetros, por ejemplo si queremos insertar 3 veces el valor -1 a partir de la posición 3 entonces los parámetros que se le pasan son: el iterador que indique desde donde queremos insertar los valores, el numero de veces que estos se repetirán y el valor que queremos agregar es decir, para el ejemplo, insertaremos el número -1, 3 veces a partir de la posición 4, el código quedaría:


#include <iostream>
#include <vector>

using namespace std;

int main()
{
//vector de 6 elementos inicializados a 9
vector<int> A(6,9);

//insertamos el valor 2 en la tercera posición del array
A.insert(A.begin()+4,3,-1);

//mostramos el nuevo vector con un 2 que se insertó antes
for(unsigned int i=0;i<A.size();i++)
cout<<A[i]<<"  ";

cout<<endl<<endl;
return 0;
}

El resultado, como se puede observar son 3 valores de -1 insertados desde la posición  4, cómo es obvio el tamaño del vector cambia, y son estos cambios dinámicos (como hemos venido mencionando) los que le dan tanto poder al tipo Vector en C++.

cap

Bueno, hasta aquí este artículo, espero que les haya sido de ayuda, ya sea para aclarar conceptos previos o para aprender sobre este “tipo de dato” en C++, uno de los más importantes y populares introducido por este lenguaje.

Un saludo, espero que si tienen sugerencias, métodos que faltaron y creen que son importantes y así los agregaremos a esta lista, si creen que esto ha sido de ayuda recuerden compartir este conocimiento, y también síguenos en Facebook ;)

Autor: Julio Marulanda.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s