cpp-que-son-vector

Qué son y cómo usar Vector en C++

En C++, un vector es una colección que implementa un array con tamaño dinámico (es decir, que se ajusta automáticamente en tamaño según sea necesario).

La clase std::vector en la biblioteca estándar de C++ proporciona una implementación. A diferencia de los arrays tradicionales, los vectors permiten la adición y eliminación de elementos.

Declaración de Vectors

Para declarar un vector en C++, se utiliza la siguiente sintaxis:

#include <vector>

std::vector<tipo> nombreVector;

Donde:

  • tipo: Es el tipo de datos que contendrá el vector, como int, double, std::string, etc.
  • nombreVector: Es el identificador del vector.

Por ejemplo, para declarar un vector de enteros:

#include <vector>

std::vector<int> numeros;

Creación e inicialización de Vectors

Una vez declarado un vector, debemos inicializarlo antes de usarlo.

Inicialización vacía

Puedes crear un vector vacío y luego agregarle elementos:

#include <vector>

std::vector<int> numeros; // Vector vacío

Inicialización con tamaño específico

Puedes inicializar un vector con un tamaño específico, donde todos los elementos se inicializan con un valor predeterminado (generalmente 0 para tipos numéricos):

#include <vector>

std::vector<int> numeros(5); // Vector con 5 elementos, todos inicializados a 0

Inicialización con valores específicos

Para inicializar un vector con valores específicos, puedes utilizar la siguiente sintaxis:

#include <vector>

std::vector<int> numeros = {1, 2, 3, 4, 5}; // Vector con valores 1, 2, 3, 4, 5

Inicialización con valor y tamaño

También puedes inicializar un vector con un tamaño específico y un valor inicial para todos los elementos:

#include <vector>

std::vector<int> numeros(5, 10); // Vector con 5 elementos, todos inicializados a 10

Uso básico de Vectors

Acceder a elementos

Los elementos de un vector se pueden acceder mediante índices, comenzando desde 0:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int primerNumero = numeros[0]; // primerNumero será 1
    std::cout << "El primer número es: " << primerNumero << std::endl;

    return 0;
}

Modificar elementos

Puedes modificar los elementos del vector asignando nuevos valores a índices específicos:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    numeros[1] = 20; // El segundo elemento del vector ahora será 20
    std::cout << "El segundo número modificado es: " << numeros[1] << std::endl;

    return 0;
}

Añadir elementos a un Vector

Para añadir elementos al final del vector, se utiliza el método push_back:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3};
    numeros.push_back(4); // Añade el número 4 al final del vector

    std::cout << "Vector después de añadir un elemento: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Eliminar elementos de un Vector

Para eliminar un elemento del final del vector, utiliza el método pop_back:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4};
    numeros.pop_back(); // Elimina el último elemento (4)

    std::cout << "Vector después de eliminar un elemento: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

También puedes eliminar un elemento en una posición específica usando el método erase:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    numeros.erase(numeros.begin() + 2); // Elimina el tercer elemento (3)

    std::cout << "Vector después de eliminar un elemento en posición 2: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Insertar elementos en una posición específica

Para insertar un elemento en una posición específica del vector, utiliza el método insert:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 4, 5};
    numeros.insert(numeros.begin() + 2, 3); // Inserta el número 3 en la posición 2

    std::cout << "Vector después de insertar un elemento en posición 2: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Propiedades y métodos útiles

Los vectors en C++ ofrecen varias propiedades y métodos para manipular y acceder a sus elementos de manera eficiente:

Propiedad size

La función size() devuelve el número de elementos en el vector:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    std::cout << "Número de elementos en el vector: " << numeros.size() << std::endl;

    return 0;
}

Método capacity

La función capacity() devuelve la capacidad actual del vector, es decir, el número de elementos que puede contener antes de necesitar una reubicación:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3};
    std::cout << "Capacidad del vector: " << numeros.capacity() << std::endl;

    return 0;
}

Método clear

El método clear() elimina todos los elementos del vector:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    numeros.clear(); // Elimina todos los elementos

    std::cout << "Número de elementos después de clear: " << numeros.size() << std::endl;

    return 0;
}

Método sort

Para ordenar los elementos de un vector, puedes utilizar la función sort de la biblioteca <algorithm>:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> numeros = {5, 3, 1, 4, 2};
    std::sort(numeros.begin(), numeros.end()); // Ordena el vector en orden ascendente

    std::cout << "Vector ordenado: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Método reverse

Para invertir el orden de los elementos, puedes utilizar la función reverse de la biblioteca <algorithm>:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    std::reverse(numeros.begin(), numeros.end()); // Invierte el orden de los elementos

    std::cout << "Vector invertido: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Ejemplos Prácticos

Calcular la Suma de los Elementos de un Vector

Este ejemplo utiliza un bucle for para calcular la suma de los elementos en un vector:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int suma = 0;

    for (int num : numeros) {
        suma += num;
    }

    std

::cout << "La suma de los elementos es: " << suma << std::endl;

    return 0;
}

Filtrar Elementos de un Vector

Este ejemplo utiliza un bucle for para filtrar los elementos pares de un vector:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    std::vector<int> numerosPares;

    for (int num : numeros) {
        if (num % 2 == 0) {
            numerosPares.push_back(num);
        }
    }

    std::cout << "Números pares: ";
    for (int num : numerosPares) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Encontrar el Valor Máximo en un Vector

Este ejemplo utiliza la función max_element de la biblioteca <algorithm> para encontrar el valor máximo en un vector:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int maximo = *std::max_element(numeros.begin(), numeros.end());

    std::cout << "El valor máximo es: " << maximo << std::endl;

    return 0;
}

Contar Cuántos Elementos Cumplen una Condición

Este ejemplo utiliza la función count_if de la biblioteca <algorithm> para contar cuántos elementos en un vector son mayores que un valor específico:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int contador = std::count_if(numeros.begin(), numeros.end(), [](int num) { return num > 3; });

    std::cout << "Hay " << contador << " elementos mayores que 3" << std::endl;

    return 0;
}

Eliminar Elementos de un Vector

Este ejemplo utiliza la función remove_if de la biblioteca <algorithm> para eliminar todos los elementos impares de un vector:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    numeros.erase(std::remove_if(numeros.begin(), numeros.end(), [](int num) { return num % 2 != 0; }), numeros.end());

    std::cout << "Números restantes: ";
    for (int num : numeros) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}