Los vectores son matrices dinámicas que tienen la capacidad de cambiar automáticamente cuando se inserta o elimina un elemento, y el contenedor maneja su almacenamiento automáticamente. Los elementos vectoriales se colocan en un almacén asociativo para que se pueda acceder a ellos y recorrerlos mediante iteradores. En los vectores, los datos se ingresan al final. La inserción al final lleva una cantidad de tiempo diferente, ya que a veces es posible que sea necesario expandir la matriz. Extraer el último elemento solo lleva un tiempo constante porque no se produce ningún cambio de tamaño. Las inserciones y eliminaciones están al principio o en medio de un tiempo lineal.
- start(): devuelve un iterador que apunta al primer elemento del vector
- end(): devuelve un iterador que apunta al elemento teórico que sigue al último elemento del vector
- rbegin(): devuelve un iterador inverso que apunta al último elemento del vector (inicio inverso). Se mueve del último elemento al primer elemento.
- rend(): devuelve un iterador inverso que apunta al elemento teórico antes del primer elemento en el vector (considerado el back-end)
- cbegin(): devuelve un iterador constante que apunta al primer elemento del vector.
- cend(): devuelve un iterador constante que apunta al elemento teórico que sigue al último elemento del vector.
- crbegin(): devuelve un iterador inverso constante que apunta al último elemento del vector (inicio inverso). Se mueve del último elemento al primer elemento.
- crend(): devuelve un iterador inverso constante que apunta al elemento teórico antes del primer elemento en el vector (considerado backend)
CPP
// C++ program to illustrate the // iterators in vector #include <iostream> #include <vector> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 5; i++) g1.push_back(i); cout << "Output of begin and end: "; for ( auto i = g1.begin(); i != g1.end(); ++i) cout << *i << " "; cout << "nOutput of cbegin and cend: "; for ( auto i = g1.cbegin(); i != g1.cend(); ++i) cout << *i << " "; cout << "nOutput of rbegin and rend: "; for ( auto ir = g1.rbegin(); ir != g1.rend(); ++ir) cout << *ir << " "; cout << "nOutput of crbegin and crend : "; for ( auto ir = g1.crbegin(); ir != g1.crend(); ++ir) cout << *ir << " "; return 0; } |
Output of begin and end: 1 2 3 4 5 Output of cbegin and cend: 1 2 3 4 5 Output of rbegin and rend: 5 4 3 2 1 Output of crbegin and crend : 5 4 3 2 1
Capacidad
- size(): devuelve el número de elementos del vector.
- max_size(): devuelve el número máximo de elementos que puede contener el vector.
- capacidad(): devuelve la cantidad de espacio de almacenamiento actualmente asignado al vector expresado como el número de elementos.
- redimensionar: cambia el tamaño del contenedor para que se ajuste a los elementos.
- vacío () – Devuelve si el contenedor está vacío.
- shrink_to_fit(): reduce la capacidad del contenedor para que se ajuste a su tamaño y elimina todos los elementos por encima de la capacidad.
- reserve(): solicita que la capacidad del vector sea al menos suficiente para contener n elementos.
CPP
// C++ program to illustrate the // capacity function in vector #include <iostream> #include <vector> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 5; i++) g1.push_back(i); cout << "Size : " << g1.size(); cout << "nCapacity : " << g1.capacity(); cout << "nMax_Size : " << g1.max_size(); // resizes the vector size to 4 g1.resize(4); // prints the vector size after resize() cout << "nSize : " << g1.size(); // checks if the vector is empty or not if (g1.empty() == false ) cout << "nVector is not empty"; else cout << "nVector is empty"; // Shrinks the vector g1.shrink_to_fit(); cout << "nVector elements are: "; for ( auto it = g1.begin(); it != g1.end(); it++) cout << *it << " "; return 0; } |
Size : 5 Capacity : 8 Max_Size : 4611686018427387903 Size : 4 Vector is not empty Vector elements are: 1 2 3 4
Acceso al elemento:
- operador de referencia [g] – Se devuelve una referencia al elemento en la posición ‘g’ en el vector
- at(g) – Devuelve una referencia al elemento en la posición ‘g’ en el vector
- front(): devuelve una referencia al primer elemento del vector
- return(): devuelve una referencia al último elemento del vector
- data(): devuelve un puntero directo a la matriz de memoria que el vector usa internamente para almacenar los elementos que posee.
CPP
// C++ program to illustrate the // element access in vector #include <bits/stdc++.h> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 10; i++) g1.push_back(i * 10); cout << "nReference operator [g] : g1[2] = " << g1[2]; cout << "nat : g1.at(4) = " << g1.at(4); cout << "nfront() : g1.front() = " << g1.front(); cout << "nback() : g1.back() = " << g1.back(); // pointer to the first element int * pos = g1.data(); cout << "nThe first element is " << *pos; return 0; } |
Reference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10
Modificadores:
- asignar (): asigna un nuevo valor a los elementos del vector reemplazando los antiguos
- push_back () – Empuja los elementos en un vector desde la parte posterior
- pop_back (): se utiliza para hacer estallar o eliminar elementos de un vector desde la parte posterior.
- insert() – Inserta nuevos elementos antes del elemento en la posición especificada
- delete(): se utiliza para eliminar elementos de un contenedor desde la posición o rango especificado.
- swap(): se utiliza para intercambiar el contenido de un vector con otro vector del mismo tipo. Los tamaños pueden variar.
- clear(): se utiliza para eliminar todos los elementos del contenedor de vectores
- emplace() – Extiende el contenedor insertando un nuevo elemento en la posición
- emplace_back(): se usa para insertar un nuevo elemento en el contenedor del vector, el nuevo elemento se agrega al final del vector
CPP
// C++ program to illustrate the // Modifiers in vector #include <bits/stdc++.h> #include <vector> using namespace std; int main() { // Assign vector vector< int > v; // fill the array with 10 five times v.assign(5, 10); cout << "The vector elements are: "; for ( int i = 0; i < v.size(); i++) cout << v[i] << " "; // inserts 15 to the last position v.push_back(15); int n = v.size(); cout << "nThe last element is: " << v[n - 1]; // removes last element v.pop_back(); // prints the vector cout << "nThe vector elements are: "; for ( int i = 0; i < v.size(); i++) cout << v[i] << " "; // inserts 5 at the beginning v.insert(v.begin(), 5); cout << "nThe first element is: " << v[0]; // removes the first element v.erase(v.begin()); cout << "nThe first element is: " << v[0]; // inserts at the beginning v.emplace(v.begin(), 5); cout << "nThe first element is: " << v[0]; // Inserts 20 at the end v.emplace_back(20); n = v.size(); cout << "nThe last element is: " << v[n - 1]; // erases the vector v.clear(); cout << "nVector size after erase(): " << v.size(); // two vector to perform swap vector< int > v1, v2; v1.push_back(1); v1.push_back(2); v2.push_back(3); v2.push_back(4); cout << "nnVector 1: "; for ( int i = 0; i < v1.size(); i++) cout << v1[i] << " "; cout << "nVector 2: "; for ( int i = 0; i < v2.size(); i++) cout << v2[i] << " "; // Swaps v1 and v2 v1.swap(v2); cout << "nAfter Swap nVector 1: "; for ( int i = 0; i < v1.size(); i++) cout << v1[i] << " "; cout << "nVector 2: "; for ( int i = 0; i < v2.size(); i++) cout << v2[i] << " "; } |
The vector elements are: 10 10 10 10 10 The last element is: 15 The vector elements are: 10 10 10 10 10 The first element is: 5 The first element is: 10 The first element is: 5 The last element is: 20 Vector size after erase(): 0 Vector 1: 1 2 Vector 2: 3 4 After Swap Vector 1: 3 4 Vector 2: 1 2
La complejidad temporal de realizar varias operaciones en vectores es:
- Acceso aleatorio – constante O(1)
- Insertar o quitar los elementos al final – constante O(1)
- Insertar o quitar elementos: lineal en distancia al final del vector O(N)
- Información de tamaño: constante O(1)
- Transformar el vector – Lineal O(N)
Todas las funciones vectoriales:
Escriba un comentario si encuentra algún problema o si desea compartir más información sobre el tema tratado anteriormente.