vector::empty() y vector::size() en C++ STL

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.
 

vector::vacío()

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;
}
Producción

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;
}
Producción

26
vector::tamaño()

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;
}
Producción

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: 

  1. La función empty() no usa ningún operador de comparación , por lo que es más conveniente usar
  2. 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;
}
Producción

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;
}
Producción

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
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *