logo

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

vektory sú rovnaké ako dynamické polia s možnosťou automatickej zmeny veľkosti pri vložení alebo odstránení prvku, pričom ich ukladanie automaticky rieši kontajner.

vector::empty()

Funkcia empty() sa používa na kontrolu, či je vektorový kontajner prázdny alebo nie.
Syntax:



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

Príklady:

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

Časová zložitosť - Konštantná O(1)

Chyby a výnimky
1. Nemá žiadnu záruku hádzania.
2. Zobrazuje chybu pri odovzdaní parametra.



CPP






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

>

typ casting a konverzia typu v jave
>

Výkon

True>

Aplikácia:
Vzhľadom na zoznam celých čísel nájdite súčet všetkých celých čísel.

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

Algoritmus
1. Skontrolujte, či je vektor prázdny, ak nie, pridajte element back do premennej inicializovanej ako 0 a vysuňte element back.
2. Opakujte tento krok, kým nebude vektor prázdny.
3. Vytlačte konečnú hodnotu premennej.

CPP




// CPP program to illustrate> // Application of empty() function> #include> #include> 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;> }>

>

>

Výkon

26>
vector::size()

Funkcia size() sa používa na vrátenie veľkosti vektorového kontajnera alebo počtu prvkov vo vektorovom kontajneri.
Syntax:

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

Príklady:

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

Časová zložitosť – Konštantná O(1)

Chyby a výnimky
1. Nemá žiadnu záruku hádzania.
2. Zobrazuje chybu pri odovzdaní parametra.

CPP


prológový jazyk



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

>

>

Výkon

5>

Prečo je prázdna () preferovaná pred veľkosťou ()
O funkcii empty() sa často hovorí, že má prednosť pred funkciou size() kvôli niektorým z týchto bodov-

  1. funkcia empty(). nepoužíva žiadne porovnávacie operátory , preto je jeho použitie pohodlnejšie
  2. funkcia empty() je realizované v konštantnom čase , bez ohľadu na typ kontajnera, zatiaľ čo niektoré implementácie funkcie size() vyžadujú časovú zložitosť O(n), ako napríklad list::size().

Aplikácia:
Vzhľadom na zoznam celých čísel nájdite súčet všetkých celých čísel.

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

Algoritmus
1. Skontrolujte, či je veľkosť vektora 0, ak nie, pridajte spätný prvok do premennej inicializovanej ako 0 a vyklopte zadný prvok.
2. Tento krok opakujte, kým veľkosť vektora nebude 0.
3. Vytlačte konečnú hodnotu premennej.

CPP




// CPP program to illustrate> // Application of size() function> #include> #include> 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;> }>

>

>

Výkon

26>

Pri používaní size() musíme byť opatrní.

Zvážte napríklad nasledujúci program:

C++


zoznam programov python



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

>

>

Výkon

Geeks For Geeks>

Vyššie uvedený program funguje dobre, ale teraz zvážime nasledujúci 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;> }>

>

>

Výkon:

Porucha segmentácie SIGEGV

Kompiláciou vyššie uvedeného programu dostaneme Segmentation Fault (SIGSEGV), pretože návratový typ size() je size_t, čo je alias pre unsigned long int.-> unsigned long int var = 0;-> coutcout << vec.size() – 1; // Toto sa bude rovnať aj 18446744073709551615

takže vo vyššie uvedenom programe prechádzame od i = 0 do i = 18446744073709551615

Teraz zvážte scenár, v ktorom odstraňujeme prvky z nášho inicializovaného kontajnera a po sekvencii operácií sa náš kontajner vyprázdni a nakoniec vytlačíme obsah nášho kontajnera pomocou vyššie uvedenej metódy. Určite to povedie k chybe segmentácie (SIGSEGV).

Ako to opraviť?

Odporúča sa pretypovať kontajner.size() na celočíselný typ, aby ste sa vyhli chybe segmentácie (SIGSEGV).

C++




čo je predloženie adresára
#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>

>

>

Výkon

Geeks For Geeks>