logo

vector::empty() și vector::size() în C++ STL

Vectori sunt la fel ca și matricele dinamice, având capacitatea de a se redimensiona automat atunci când un element este inserat sau șters, stocarea lor fiind gestionată automat de container.

vector::empty()

Funcția empty() este folosită pentru a verifica dacă containerul vector este gol sau nu.
Sintaxa:



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

Exemple:

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

Complexitatea timpului - Constanta O(1)

Erori și excepții
1. Are o garanție de aruncare fără excepție.
2. Afișează o eroare când este transmis un parametru.



CPP






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

>

>

Ieșire

True>

Aplicatie:
Având în vedere o listă de numere întregi, găsiți suma tuturor numerelor întregi.

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

Algoritm
1. Verificați dacă vectorul este gol, dacă nu adăugați elementul din spate la o variabilă inițializată ca 0 și deschideți elementul din spate.
2. Repetați acest pas până când vectorul este gol.
3. Tipăriți valoarea finală a variabilei.

CPP




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

ștergeți memoria cache npm

>

>

Ieșire

26>
vector::size()

Funcția size() este utilizată pentru a returna dimensiunea containerului vectorial sau numărul de elemente din containerul vectorial.
Sintaxa:

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

Exemple:

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

Complexitatea timpului – constanta O(1)

Erori și excepții
1. Are o garanție de aruncare fără excepție.
2. Afișează o eroare când este transmis un parametru.

CPP




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

exemplu de clasă java
>

>

Ieșire

5>

De ce este empty() preferat față de size()
Se spune adesea că funcția empty() este preferată față de funcția size() datorită unora dintre aceste puncte-

  1. funcția empty(). nu folosește niciun operator de comparație , astfel este mai convenabil de utilizat
  2. funcția empty() este implementate în timp constant , indiferent de tipul containerului, în timp ce unele implementări ale funcției size() necesită complexitate în timp O(n), cum ar fi list::size().

Aplicatie:
Având în vedere o listă de numere întregi, găsiți suma tuturor numerelor întregi.

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

Algoritm
1. Verificați dacă dimensiunea vectorului este 0, dacă nu adăugați elementul din spate la o variabilă inițializată ca 0 și deschideți elementul din spate.
2. Repetați acest pas până când dimensiunea vectorului devine 0.
3. Tipăriți valoarea finală a variabilei.

CPP




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

>

>

Ieșire

26>

Ni se cere să fim atenți când folosim size().

De exemplu, luați în considerare următorul program:

C++


java citiți csv



#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;> }>

>

>

Ieșire

Geeks For Geeks>

Programul de mai sus funcționează bine, dar acum să luăm în considerare următorul program:

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;> }>

>

>

Ieșire:

Eroare de segmentare SIGEGV

Prin compilarea programului de mai sus, obținem Segmentation Fault (SIGSEGV) deoarece tipul returnat de size() este size_t, care este un alias pentru unsigned long int.-> unsigned long int var = 0;-> coutcout << vec.size() – 1; // Acesta va fi, de asemenea, egal cu 18446744073709551615

deci facem bucla de la i = 0 la i = 18446744073709551615 în programul de mai sus

Acum luați în considerare scenariul în care ștergem elemente din containerul nostru inițializat și după o secvență de operații containerul nostru devine gol și, în sfârșit, tipărim conținutul containerului nostru folosind metoda de mai sus. Cu siguranță, va duce la o eroare de segmentare (SIGSEGV).

Cum să o repar?

Este recomandabil să tipați container.size() la tipul întreg pentru a evita eroarea de segmentare (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>

>

>

program c pentru matrice bidimensională
Ieșire

Geeks For Geeks>