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.
Si quieres aprender más sobre Arrays dinámicos
consulta el Curso de Introducción a la Programación leer más
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
, comoint
,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:
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):
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:
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:
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:
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;
Alternativamente podemos usar el método at
, que proporciona acceso seguro a los elementos (lanzando una excepción si el índice está fuera de los límites).
int segundo_elemento = numeros.at(1);
Modificar elementos
Puedes modificar los elementos del vector
asignando nuevos valores a índices específicos:
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;
Añadir elementos a un vector
Para añadir elementos al final del vector
, se utiliza el método push_back
:
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;
Eliminar elementos de un vector
Para eliminar un elemento del final del vector
, utiliza el método pop_back
:
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;
También puedes eliminar un elemento en una posición específica usando el método erase
:
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;
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
:
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;
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
:
std::vector<int> numeros = {1, 2, 3, 4, 5};
std::cout << "Número de elementos en el vector: " << numeros.size() << std::endl;
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:
std::vector<int> numeros = {1, 2, 3};
std::cout << "Capacidad del vector: " << numeros.capacity() << std::endl;
Método clear
El método clear()
elimina todos los elementos del vector
:
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;
Método empty
Comprueba si el vector está vacío.
if (numeros.empty()) {
std::cout << "El vector está vacío" << std::endl;
}
Método sort
Para ordenar los elementos de un vector
, puedes utilizar la función sort
de la biblioteca <algorithm>
:
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;
Método reverse
Para invertir el orden de los elementos, puedes utilizar la función reverse
de la biblioteca <algorithm>
:
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;
Método resize
Cambia el tamaño del vector.
numeros.resize(10); // Redimensiona el vector a 10 elementos
Método reserve
Reserva espacio para al menos el número especificado de elementos.
numeros.reserve(20); // Reserva espacio para 20 elementos
Método shrink_to_fit
Redimensiona la capacidad del vector para que coincida con su tamaño.
numeros.shrink_to_fit();
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;
}