Los vectores son lo mismo que las arrays dinámicas con la capacidad de cambiar su tamaño automáticamente cuando se inserta o elimina un elemento, y el contenedor maneja automáticamente su almacenamiento.
La función empty() se utiliza para comprobar si el contenedor de vectores está vacío o no.
Sintaxis:
vectorname.empty() Parameters : No parameters are passed. Returns : True, if vector is empty False, Otherwise
Ejemplos:
Input : myvector = 1, 2, 3, 4, 5 myvector.empty(); Output : False Input : myvector = {} myvector.empty(); Output : True
Complejidad del Tiempo – Constante O(1)
Errores y Excepciones
1. No tiene garantía de lanzamiento de excepciones.
2. Muestra error cuando se pasa un parámetro.
CPP
// CPP program to illustrate // Implementation of empty() function #include <iostream> #include <vector> using namespace std; int main() { vector<int> myvector{}; if (myvector.empty()) { cout << "True"; } else { cout << "False"; } return 0; }
True
Aplicación:
Dada una lista de números enteros, encuentre la suma de todos los números enteros.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26
Algoritmo
1. Verifique si el vector está vacío, si no, agregue el elemento posterior a una variable inicializada como 0, y extraiga el elemento posterior.
2. Repita este paso hasta que el vector esté vacío.
3. Imprime el valor final de la variable.
CPP
// CPP program to illustrate // Application of empty() function #include <iostream> #include <vector> using namespace std; int main() { int sum = 0; vector<int> myvector{ 1, 5, 6, 3, 9, 2 }; while (!myvector.empty()) { sum = sum + myvector.back(); myvector.pop_back(); } cout << sum; return 0; }
26
La función size() se utiliza para devolver el tamaño del contenedor de vectores o el número de elementos en el contenedor de vectores.
Sintaxis:
vectorname.size() Parameters : No parameters are passed. Returns : Number of elements in the container.
Ejemplos:
Input : myvector = 1, 2, 3, 4, 5 myvector.size(); Output : 5 Input : myvector = {} myvector.size(); Output : 0
Complejidad del Tiempo – Constante O(1)
Errores y Excepciones
1. No tiene garantía de lanzamiento de excepciones.
2. Muestra error cuando se pasa un parámetro.
CPP
// CPP program to illustrate // Implementation of size() function #include <iostream> #include <vector> using namespace std; int main() { vector<int> myvector{ 1, 2, 3, 4, 5 }; cout << myvector.size(); return 0; }
5
¿Por qué se prefiere vacío() sobre tamaño()?
A menudo se dice que la función vacío() es preferible a la función tamaño() debido a algunos de estos puntos:
- La función empty() no usa ningún operador de comparación , por lo que es más conveniente usar
- La función empty() se implementa en tiempo constante , independientemente del tipo de contenedor, mientras que algunas implementaciones de la función size() requieren una complejidad de tiempo O(n), como list::size().
Aplicación:
Dada una lista de números enteros, encuentre la suma de todos los números enteros.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26
Algoritmo
1. Verifique si el tamaño del vector es 0, si no, agregue el elemento posterior a una variable inicializada como 0, y extraiga el elemento posterior.
2. Repita este paso hasta que el tamaño del vector sea 0.
3. Imprima el valor final de la variable.
CPP
// CPP program to illustrate // Application of size() function #include <iostream> #include <vector> using namespace std; int main() { int sum = 0; vector<int> myvector{ 1, 5, 6, 3, 9, 2 }; while (myvector.size() > 0) { sum = sum + myvector.back(); myvector.pop_back(); } cout << sum; return 0; }
26
Estamos obligados a tener cuidado al usar size().
Por ejemplo, considere el siguiente programa:
C++
#include <bits/stdc++.h> using namespace std; int main() { // Initializing a vector of string type vector<string> vec = { "Geeks", "For", "Geeks" }; for (int i = 0 ; i <= vec.size() - 1 ; i++) cout << vec[i] << ' '; return 0; }
Geeks For Geeks
El programa anterior funciona bien, pero ahora consideremos el siguiente programa:
C++
#include <bits/stdc++.h> using namespace std; int main() { // Initializing a vector of string type vector<string> vec = { "Geeks", "For", "Geeks" }; vec.clear(); for (int i = 0; i <= vec.size() - 1; i++) cout << vec[i] << ' '; cout << "Geeks For Geeks"; return 0; }
Producción:
Falla de Segmentación SIGEGV
Al compilar el programa anterior, obtenemos un error de segmentación (SIGSEGV) porque el tipo de retorno de size() es size_t, que es un alias para unsigned long int.-> unsigned long int var = 0;-> cout << var – 1; // Esto será igual a 18446744073709551615-> vector<tipo_de_datos> vec;-> cout << vec.size() – 1; // Esto también será igual a 18446744073709551615
entonces estamos recorriendo desde i = 0 hasta i = 18446744073709551615 en el programa anterior
Ahora considere el escenario en el que estamos eliminando elementos de nuestro contenedor inicializado y después de una secuencia de operaciones, nuestro contenedor se vacía y, por último, estamos imprimiendo el contenido de nuestro contenedor utilizando el método anterior. Definitivamente, conducirá a una falla de segmentación (SIGSEGV).
¿Como arreglarlo?
Es recomendable encasillar container.size() al tipo entero para evitar el error de segmentación (SIGSEGV).
C++
#include <bits/stdc++.h> using namespace std; int main() { // Initializing a vector of string type vector<string> vec = { "Geeks", "For", "Geeks" }; // Clearing the vector // Now size is equal to 0 vec.clear(); // Typecasting vec.size() to int for (int i = 0; i < (int)vec.size() - 1; i++) cout << vec[i] << ' '; cout << "Geeks For Geeks"; return 0; } // This code is contributed by Bhuwanesh Nainwal
Geeks For Geeks
Publicación traducida automáticamente
Artículo escrito por AyushSaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA