vektori::empty() ja vektori::size() C++ STL:ssä
Vektorit ovat samat kuin dynaamiset taulukot, joilla on mahdollisuus muuttaa itsensä kokoa automaattisesti, kun elementti lisätään tai poistetaan, ja säilö käsittelee niiden tallennuksen automaattisesti.
Tyhjä()-funktiota käytetään tarkistamaan, onko vektorisäiliö tyhjä vai ei.
Syntaksi :
vectorname .empty() Parameters : No parameters are passed. Returns : True, if vector is empty False, Otherwise
Esimerkkejä:
Input : myvector = 1, 2, 3, 4, 5 myvector.empty(); Output : False Input : myvector = {} myvector.empty(); Output : True Aika monimutkaisuus - Vakio O(1)
Virheet ja poikkeukset
1. Sillä ei ole poikkeusta heittoakuuta.
2. Näyttää virheilmoituksen, kun parametri välitetään.
CPP
// CPP program to illustrate> // Implementation of empty() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >oma vektori{};> > if> (myvector.empty())> > {> > cout < <> 'True'> ;> > }> > else> {> > cout < <> 'False'> ;> > }> > return> 0;> }> |
Lähtö
True
Sovellus:
Kun annetaan luettelo kokonaisluvuista, etsi kaikkien kokonaislukujen summa.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26
Algoritmi
1. Tarkista, onko vektori tyhjä, jos ei, lisää back-elementti muuttujaan, joka on alustettu 0:ksi, ja pop back-elementti.
2. Toista tämä vaihe, kunnes vektori on tyhjä.
3. Tulosta muuttujan lopullinen arvo.
CPP
// CPP program to illustrate> // Application of empty() function> #include> #include> using> namespace> std;> int> main()> {> > int> sum = 0;> > vector <> int> >myvektori{ 1, 5, 6, 3, 9, 2 };> > while> (!myvector.empty())> > {> > sum = sum + myvector.back();> > myvector.pop_back();> > }> > cout < < sum;> > return> 0;> }> |
Lähtö
26vektori::koko()
size()-funktiota käytetään palauttamaan vektorisäiliön koko tai elementtien lukumäärä vektorisäiliössä.
Syntaksi :
vectorname .size() Parameters : No parameters are passed. Returns : Number of elements in the container.
Esimerkkejä:
Input : myvector = 1, 2, 3, 4, 5 myvector.size(); Output : 5 Input : myvector = {} myvector.size(); Output : 0 Aika monimutkaisuus – Vakio O(1)
Virheet ja poikkeukset
1. Sillä ei ole poikkeusta heittotakuu.
2. Näyttää virheilmoituksen, kun parametri välitetään.
CPP
// CPP program to illustrate> // Implementation of size() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >myvektori{ 1, 2, 3, 4, 5 };> > cout < < myvector.size();> > return> 0;> }> |
Lähtö
5
Miksi tyhjä() on parempi kuin koko()
Tyhjä()-funktion sanotaan usein olevan parempi kuin size()-funktion, johtuen joistakin näistä kohdista-
- tyhjä()-funktio ei käytä vertailuoperaattoreita , joten sitä on mukavampi käyttää
- tyhjä()-funktio on toteutetaan jatkuvassa ajassa , säiliötyypistä riippumatta, kun taas jotkin size()-funktion toteutukset vaativat O(n)-aikamonimutkaisuutta, kuten list::size().
Sovellus:
Kun annetaan luettelo kokonaisluvuista, etsi kaikkien kokonaislukujen summa.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26
Algoritmi
1. Tarkista onko vektorin koko 0, jos ei, lisää back-elementti muuttujaan, joka on alustettu 0:ksi, ja pop-elementti.
2. Toista tämä vaihe, kunnes vektorin kooksi tulee 0.
3. Tulosta muuttujan lopullinen arvo.
CPP
// CPP program to illustrate> // Application of size() function> #include> #include> using> namespace> std;> int> main()> {> > int> sum = 0;> > vector <> int> >myvektori{ 1, 5, 6, 3, 9, 2 };> > while> (myvector.size()>0) {> > sum = sum + myvector.back();> > myvector.pop_back();> > }> > cout < < sum;> > return> 0;> }> |
Lähtö
26
Meidän tulee olla varovaisia käyttäessämme kokoa().
Harkitse esimerkiksi seuraavaa ohjelmaa:
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;> }> |
Lähtö
Geeks For Geeks
Yllä oleva ohjelma toimii hyvin, mutta tarkastellaan nyt seuraavaa ohjelmaa:
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;> }> |
Lähtö:
Segmentointivika SIGEGV
Kääntämällä yllä olevan ohjelman saamme segmentointivirheen (SIGSEGV), koska size():n palautustyyppi on size_t, joka on alias unsigned long int.-> unsigned long int var = 0;-> cout
joten olemme silmukassa i = 0:sta i = 18446744073709551615:een yllä olevassa ohjelmassa
Harkitse nyt skenaariota, jossa poistamme elementtejä alustetusta säilöstämme ja toimintosarjan jälkeen säiliömme tyhjenee ja lopuksi tulostamme säilömme sisällön yllä olevalla menetelmällä. Se johtaa varmasti segmentointivirheeseen (SIGSEGV).
Kuinka korjata se?
On suositeltavaa kirjoittaa container.size() kokonaislukutyyppiin segmentointivian (SIGSEGV) välttämiseksi.
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> |
Lähtö
Geeks For Geeks