logo

vector::empty() og vector::size() i C++ STL

Vektorer er de samme som dynamiske arrays med mulighed for at ændre størrelsen på sig selv automatisk, når et element indsættes eller slettes, og deres lagring håndteres automatisk af containeren.

vector::empty()

Funktionen empty() bruges til at kontrollere, om vektorbeholderen er tom eller ej.
Syntaks:

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

Eksempler:



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

Tidskompleksitet – Konstant O(1)

Fejl og undtagelser
1. Det har en ingen undtagelse kaste garanti.
2. Viser fejl, når en parameter er bestået.

CPP




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

>

>

latex partielt derivat
Produktion

True>

Ansøgning :
Givet en liste over heltal, find summen af ​​alle heltal.

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

Algoritme
1. Tjek, om vektoren er tom, hvis ikke, tilføj bagelementet til en variabel initialiseret som 0, og pop bagelementet.
2. Gentag dette trin, indtil vektoren er tom.
3. Udskriv den endelige værdi af variablen.

CPP




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

>

>

Produktion

26>
vektor::størrelse()

funktionen size() bruges til at returnere størrelsen af ​​vektorbeholderen eller antallet af elementer i vektorbeholderen.
Syntaks:

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

Eksempler:

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

Tidskompleksitet – Konstant O(1)

Fejl og undtagelser
1. Det har en ingen undtagelse kaste garanti.
2. Viser fejl, når en parameter er bestået.

strengsammenkædning

CPP




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

>

>

Produktion

5>

Hvorfor foretrækkes tomme() frem for størrelse()
tomme()-funktionen siges ofte at være foretrukket frem for størrelse()-funktionen på grund af nogle af disse punkter-

  1. tomme() funktion bruger ingen sammenligningsoperatorer , så det er mere bekvemt at bruge
  2. funktionen tomme() er implementeret i konstant tid , uanset containertype, hvorimod nogle implementeringer af funktionen size() kræver O(n) tidskompleksitet såsom list::size().

Ansøgning :
Givet en liste over heltal, find summen af ​​alle heltal.

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

Algoritme
1. Tjek om størrelsen af ​​vektoren er 0, hvis ikke tilføj bagelementet til en variabel initialiseret som 0, og pop bagelementet.
2. Gentag dette trin, indtil størrelsen af ​​vektoren bliver 0.
3. Udskriv den endelige værdi af variablen.

CPP




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

>

>

Produktion

hvordan man sorterer et array i java
26>

Vi skal være forsigtige, når vi bruger size().

Overvej for eksempel følgende 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;> }>

>

>

Produktion

Geeks For Geeks>

Ovenstående program fungerer fint, men lad os nu overveje følgende program:

tkinter knap

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

>

>

Produktion:

Segmenteringsfejl SIGEGV

Ved at kompilere ovenstående program får vi Segmentation Fault (SIGSEGV), fordi returtypen for size() er size_t som er et alias for unsigned long int.-> unsigned long int var = 0;-> coutcout << vec.size() – 1; // Dette vil også være lig med 18446744073709551615

så vi går fra i = 0 til i = 18446744073709551615 i ovenstående program

Overvej nu scenariet, hvor vi sletter elementer fra vores initialiserede container, og efter en sekvens af operationer bliver vores container tom, og til sidst udskriver vi indholdet af vores container ved hjælp af ovenstående metode. Det vil helt sikkert føre til Segmentation Fault (SIGSEGV).

Hvordan fikser man det?

Det er tilrådeligt at typecaste container.size() til heltalstype for at undgå Segmentation Fault (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>

alfabet og tal
>

>

Produktion

Geeks For Geeks>