viernes, 20 de septiembre de 2019

Operaciones sobre vectores en C++

El tipo vector de C++, al igual que los arreglos, permite almacenar un conjunto de elementos del mismo tipo en posiciones de memoria contiguas. Dado que es una plantilla, podemos utilizar los métodos disponibles para manejar más cómodamente sus elementos.

Para utilizarlo, debemos añadir la cabecera:

#include <vector>

Algunos de los métodos más utilizados son:


  • size(): permite obtener el número de elementos del vector.
  • front(): permite obtener el elemento que se encuentra al inicio del vector.
  • back(): permite obtener el elemento que se encuentra al final del vector.
  • operator[]: permite obtener o establecer el elemento que se encuentra en un índice determinado (indexación).
  • push_back(): permite insertar un elemento al final del vector, lo que hace que aumente el tamaño del vector.
  • pop_back(): permite eliminar el último elemento de la colección, lo que hace que disminuya el tamaño del vector.
  • begin(): permite obtener un iterador que apunta al primer elemento del vector.
  • end(): permite obtener un iterador que apunta al último elemento del vector.
  • empty(): permite saber si el vector está vacío.
  • erase(): permite eliminar del vector un elemento o un conjunto de elementos.

Utilizando estos métodos, podríamos escribir algunas funciones para realizar algunas operaciones que se requieren muy frecuentemente, siendo éstas:

  • Función que permita imprimir todos los elementos de un vector.
  • Función que permita buscar un elemento en un vector.
  • Función que permita reemplazar un elemento de un vector por otro.
  • Función que permita eliminar un elemento de un vector.

La función que permita imprimir los elementos podría ser la siguiente (observe que el vector es pasado por referencia y se utilizan los métodos size() y operator[]):


void imprimir_vector(vector<int> &v)
{
    unsigned int i;
    for (i=0; i<v.size(); i++)
            cout << v[i] << " ";
    cout << endl;
}


A continuación podemos ver el código de la función que permite buscar un elemento en el vector (observe que el vector es pasado por referencia, como segundo parámetro se pasa el elemento que queremos buscar y que nos devuelve el índice del elemento encontrado o el valor -1 si no se encontró):


int buscar(vector<int> &v, int e)
{
    int encontrado = -1;
    unsigned int i;
    for (i=0; i<v.size(); i++)
        if (e == v[i]) encontrado = i;
    return encontrado;
}


La función que permita reemplazar un elemento por otro podría ser la siguiente (observe que el vector es pasado por referencia, como segundo parámetro pasamos el elemento que queremos reemplazar y como tercer parámetro el nuevo valor que debe quedar en la misma posición):



void reemplazar(vector<int> &v, int e1, int e2)
{
    int bus;
    bus = buscar(v, e1);
    if (bus != -1) v[bus] = e2;
    else cout << "El elemento a reemplazar no existe...\n";

}


Finalmente, tenemos el código de la función eliminar (observe que el vector es pasado por referencia, como segundo parámetro pasamos el elemento que queremos eliminar y utilizamos los métodos erase y begin):



void eliminar(vector<int> &v, int e)
{
    int bus;
    bus = buscar(v, e);
    if (bus != -1) v.erase(v.begin()+bus);
    else cout << "El elemento a eliminar no existe...\n";

}



Espero que esta información les sea de utilidad.

Un saludo a todos!!





No hay comentarios:

Publicar un comentario