Vektoriai yra tokie patys kaip dinaminiai masyvai su galimybe automatiškai keisti dydį, kai elementas įterpiamas arba ištrintas, o jų saugojimą automatiškai tvarko konteineris.
Funkcija tuščias () naudojama patikrinti, ar vektoriaus konteineris tuščias, ar ne.
Sintaksė:
vectorname .empty() Parameters : No parameters are passed. Returns : True, if vector is empty False, Otherwise>
Pavyzdžiai:
Input : myvector = 1, 2, 3, 4, 5 myvector.empty(); Output : False Input : myvector = {} myvector.empty(); Output : True>
Laiko sudėtingumas - Konstanta O(1)
Klaidos ir išimtys
1. Jai netaikoma metimo garantija.
2. Rodo klaidą, kai perduodamas parametras.
CPP
// CPP program to illustrate> // Implementation of empty() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >mano vektorius{};> > if> (myvector.empty())> > {> > cout <<> 'True'> ;> > }> > else> {> > cout <<> 'False'> ;> > }> > return> 0;> }> |
>
>Išvestis
True>
Taikymas:
Pateikiame sveikųjų skaičių sąrašą, raskite visų sveikųjų skaičių sumą.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>
Algoritmas
1. Patikrinkite, ar vektorius tuščias, jei ne, pridėkite atgalinį elementą į kintamąjį, inicijuotą kaip 0, ir iškelkite atgalinį elementą.
2. Kartokite šį veiksmą, kol vektorius bus tuščias.
3. Išspausdinkite galutinę kintamojo reikšmę.
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;> }> |
>
java if teiginys
>Išvestis
26>vektorius::dydis()
Funkcija size() naudojama vektoriaus konteinerio dydžiui arba vektoriaus konteinerio elementų skaičiui grąžinti.
Sintaksė:
vectorname .size() Parameters : No parameters are passed. Returns : Number of elements in the container.>
Pavyzdžiai:
Input : myvector = 1, 2, 3, 4, 5 myvector.size(); Output : 5 Input : myvector = {} myvector.size(); Output : 0>
Laiko sudėtingumas – Konstanta O(1)
Klaidos ir išimtys
1. Jai netaikoma metimo garantija.
2. Rodo klaidą, kai perduodamas parametras.
CPP
// 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;> }> |
>
>Išvestis
5>
Kodėl tuščias() teikia pirmenybę, o ne dydį()
Dažnai sakoma, kad funkcija tuščia () yra teikiama pirmenybę funkcijai size () dėl kai kurių iš šių taškų-
- tuščia () funkcija nenaudoja jokių palyginimo operatorių , todėl juo patogiau naudotis
- tuščia() funkcija yra įgyvendinama pastoviu laiku , neatsižvelgiant į konteinerio tipą, o kai kurioms dydžio() funkcijos įgyvendinimui reikalingas O(n) laiko sudėtingumas, pvz., list::size().
Taikymas:
Pateikiame sveikųjų skaičių sąrašą, raskite visų sveikųjų skaičių sumą.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>
Algoritmas
1. Patikrinkite, ar vektoriaus dydis yra 0, jei ne, pridėkite atgalinį elementą į kintamąjį, inicijuotą kaip 0, ir iškelkite atgalinį elementą.
2. Kartokite šį veiksmą, kol vektoriaus dydis taps 0.
3. Išspausdinkite galutinę kintamojo reikšmę.
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;> }> |
>
>Išvestis
26>
Naudodami dydį () turime būti atsargūs.
Pavyzdžiui, apsvarstykite šią programą:
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;> }> |
>
>Išvestis
Geeks For Geeks>
Aukščiau pateikta programa veikia gerai, bet dabar panagrinėkime šią 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;> }> |
>
>
Išvestis:
Segmentacijos gedimas SIGEGV
Sudarę aukščiau pateiktą programą, gauname segmentavimo gedimą (SIGSEGV), nes dydis() grąžinimo tipas yra size_t, kuris yra unsigned long int.-> unsigned long int var = 0;-> cout slapyvardis.
taigi pirmiau pateiktoje programoje judame nuo i = 0 iki i = 18446744073709551615
Dabar apsvarstykite scenarijų, kai ištriname elementus iš inicijuoto konteinerio, o po operacijų sekos mūsų konteineris tampa tuščias ir galiausiai spausdiname konteinerio turinį naudodami aukščiau pateiktą metodą. Be abejo, tai sukels segmentavimo gedimą (SIGSEGV).
Kaip tai ištaisyti?
Norint išvengti segmentavimo gedimo (SIGSEGV), patartina įvesti konteinerį.size() į sveikųjų skaičių.
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> |
>
>
daryti būdami javaIšvestis
Geeks For Geeks>