vector::empty() in vector::size() v C++ STL

Vektorji so enaki kot dinamični nizi z možnostjo samodejnega spreminjanja velikosti, ko je element vstavljen ali izbrisan, pri čemer njihovo shranjevanje samodejno obravnava vsebnik.

vektor::prazno()

Funkcija empty() se uporablja za preverjanje, ali je vektorski vsebnik prazen ali ne.
Sintaksa:

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

Primeri:

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

Časovna zapletenost – Konstanta O(1)

Napake in izjeme
1. Nima nobene izjeme vrže garancije.
2. Prikaže napako, ko je parameter posredovan.

CPP




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

Izhod

True 

Uporaba:
Podan je seznam celih števil, poiščite vsoto vseh celih števil.

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

Algoritem
1. Preverite, ali je vektor prazen, če ni, dodajte zadnji element spremenljivki, inicializirani kot 0, in izpnite zadnji element.
2. Ta korak ponavljajte, dokler vektor ni prazen.
3. Natisnite končno vrednost spremenljivke.

CPP




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

Izhod

26 
vektor::velikost()

funkcija size() se uporablja za vrnitev velikosti vektorskega vsebnika ali števila elementov v vektorskem vsebniku.
Sintaksa:

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

Primeri:

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

Časovna zapletenost – Konstanta O(1)

Napake in izjeme
1. Nima nobene izjeme vrže garancije.
2. Prikaže napako, ko je parameter posredovan.

CPP




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

Izhod

5 

Zakaj ima empty() prednost pred size()
za funkcijo empty() pogosto pravijo, da ima prednost pred funkcijo size() zaradi nekaterih od teh točk-

  1. funkcija empty(). ne uporablja primerjalnih operatorjev , zato je bolj priročen za uporabo
  2. funkcija empty() je izvajati v konstantnem času , ne glede na vrsto vsebnika, medtem ko nekatere izvedbe funkcije size() zahtevajo O(n) časovno zapletenost, kot je list::size().

Uporaba:
Podan je seznam celih števil, poiščite vsoto vseh celih števil.

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

Algoritem
1. Preverite, ali je velikost vektorja 0, če ni, dodajte zadnji element spremenljivki, inicializirani kot 0, in odstranite zadnji element.
2. Ponavljajte ta korak, dokler velikost vektorja ne postane 0.
3. Natisnite končno vrednost spremenljivke.

CPP




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

Izhod

26 

Pri uporabi size() moramo biti previdni.

Na primer, razmislite o naslednjem programu:

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

Izhod

Geeks For Geeks 

Zgornji program deluje dobro, zdaj pa razmislimo o naslednjem programu:

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

Izhod:

Napaka segmentacije SIGEGV

S prevajanjem zgornjega programa dobimo Segmentation Fault (SIGSEGV), ker je povratni tip size() size_t, ki je vzdevek za unsigned long int.-> unsigned long int var = 0;-> cout cout < < vec.size() – 1; // To bo tudi enako 18446744073709551615

tako se v zgornjem programu vrtimo od i = 0 do i = 18446744073709551615

Zdaj razmislite o scenariju, kjer izbrišemo elemente iz našega inicializiranega vsebnika in po zaporedju operacij naš vsebnik postane prazen in nazadnje natisnemo vsebino našega vsebnika z uporabo zgornje metode. Vsekakor bo povzročilo napako segmentacije (SIGSEGV).

Kako to popraviti?

Priporočljivo je, da container.size() pretvorite v celoštevilski tip, da se izognete napaki segmentacije (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>

Izhod

Geeks For Geeks