logo

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

Vectors són els mateixos que les matrius dinàmiques amb la possibilitat de canviar la mida automàticament quan s'insereix o s'elimina un element, amb el seu emmagatzematge gestionat automàticament pel contenidor.

vector::buit()

La funció empty() s'utilitza per comprovar si el contenidor vectorial està buit o no.
Sintaxi:



  vectorname  .empty() Parameters : No parameters are passed. Returns : True, if vector is empty False, Otherwise>

Exemples:

Input : myvector = 1, 2, 3, 4, 5 myvector.empty(); Output : False Input : myvector = {} myvector.empty(); Output : True>

Complexitat temporal - constant O(1)

Errors i excepcions
1. No té cap excepció garantia de llançament.
2. Mostra un error quan es passa un paràmetre.



CPP






// CPP program to illustrate> // Implementation of empty() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>el meuvector{};> >if> (myvector.empty())> >{> >cout <<>'True'>;> >}> >else> {> >cout <<>'False'>;> >}> >return> 0;> }>

>

>

Sortida

True>

Aplicació:
Donada una llista de nombres enters, troba la suma de tots els nombres enters.

Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>

Algoritme
1. Comproveu si el vector està buit, si no, afegiu l'element posterior a una variable inicialitzada com a 0, i feu clic a l'element posterior.
2. Repetiu aquest pas fins que el vector estigui buit.
3. Imprimeix el valor final de la variable.

CPP




convertir de cadena a nombre enter java

// CPP program to illustrate> // Application of empty() function> #include> #include> using> namespace> std;> int> main()> {> >int> sum = 0;> >vector<>int>>el meuvector{ 1, 5, 6, 3, 9, 2 };> >while> (!myvector.empty())> >{> >sum = sum + myvector.back();> >myvector.pop_back();> >}> >cout << sum;> >return> 0;> }>

>

>

Sortida

26>
vector::mida()

La funció size() s'utilitza per retornar la mida del contenidor vectorial o el nombre d'elements del contenidor vectorial.
Sintaxi:

  vectorname  .size() Parameters : No parameters are passed. Returns : Number of elements in the container.>

Exemples:

Input : myvector = 1, 2, 3, 4, 5 myvector.size(); Output : 5 Input : myvector = {} myvector.size(); Output : 0>

Complexitat temporal – Constant O (1)

Errors i excepcions
1. No té cap excepció garantia de llançament.
2. Mostra un error quan es passa un paràmetre.

CPP




// CPP program to illustrate> // Implementation of size() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>el meuvector{ 1, 2, 3, 4, 5 };> >cout << myvector.size();> >return> 0;> }>

>

string convertir a int a Java
>

Sortida

5>

Per què es prefereix empty() a la mida()
Sovint es diu que la funció empty() és preferida a la funció size() a causa d'alguns d'aquests punts:

  1. funció empty(). no utilitza cap operador de comparació , per tant, és més còmode d'utilitzar
  2. La funció empty() és implementat en temps constant , independentment del tipus de contenidor, mentre que algunes implementacions de la funció size() requereixen complexitat de temps O(n), com ara list::size().

Aplicació:
Donada una llista de nombres enters, troba la suma de tots els nombres enters.

Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>

Algoritme
1. Comproveu si la mida del vector és 0, si no, afegiu l'element posterior a una variable inicialitzada com a 0, i feu clic a l'element posterior.
2. Repetiu aquest pas fins que la mida del vector sigui 0.
3. Imprimeix el valor final de la variable.

CPP




// CPP program to illustrate> // Application of size() function> #include> #include> using> namespace> std;> int> main()> {> >int> sum = 0;> >vector<>int>>el meuvector{ 1, 5, 6, 3, 9, 2 };> >while> (myvector.size()>0) {> >sum = sum + myvector.back();> >myvector.pop_back();> >}> >cout << sum;> >return> 0;> }>

>

>

Sortida

26>

Hem de tenir cura quan utilitzem size().

Per exemple, considereu el programa següent:

C++




#include> using> namespace> std;> int> main()> {> >// Initializing a vector of string type> >vector vec = {>'Geeks'>,>'For'>,>'Geeks'> };> >for> (>int> i = 0 ; i <= vec.size() - 1 ; i++)> >cout << vec[i] <<>' '>;> >return> 0;> }>

>

>

Sortida

Geeks For Geeks>

El programa anterior funciona bé, però ara considerem el programa següent:

C++




#include> using> namespace> std;> int> main()> {> >// Initializing a vector of string type> >vector vec = {>'Geeks'>,>'For'>,>'Geeks'> };> >vec.clear();> >for> (>int> i = 0; i <= vec.size() - 1; i++)> >cout << vec[i] <<>' '>;> >cout <<>'Geeks For Geeks'>;> >return> 0;> }>

>

comparat en java

>

Sortida:

Falla de segmentació SIGEGV

En compilar el programa anterior, obtenim Segmentation Fault (SIGSEGV) perquè el tipus de retorn de size() és size_t, que és un àlies per unsigned long int.-> unsigned long int var = 0;-> coutcout << vec.size() – 1; // Això també serà igual a 18446744073709551615

així que estem fent un bucle de i = 0 a i = 18446744073709551615 al programa anterior

Considereu ara l'escenari en què estem suprimint elements del nostre contenidor inicialitzat i després d'una seqüència d'operacions el nostre contenidor es buida i, finalment, estem imprimint el contingut del nostre contenidor mitjançant el mètode anterior. Definitivament, donarà lloc a un error de segmentació (SIGSEGV).

Com solucionar-ho?

És recomanable convertir container.size() al tipus d'enter per evitar errors de segmentació (SIGSEGV).

C++




#include> using> namespace> std;> int> main()> {> >// Initializing a vector of string type> >vector 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>

>

>

Sortida

Geeks For Geeks>