logo

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

Vektoren sind dasselbe wie dynamische Arrays mit der Möglichkeit, ihre Größe automatisch zu ändern, wenn ein Element eingefügt oder gelöscht wird, wobei ihre Speicherung automatisch vom Container verwaltet wird.

vector::empty()

Mit der Funktion empty() wird überprüft, ob der Vektorcontainer leer ist oder nicht.
Syntax :



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

Beispiele:

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

Zeitkomplexität – Konstante O(1)

Fehler und Ausnahmen
1. Es gibt eine Ausnahmegarantie.
2. Zeigt einen Fehler an, wenn ein Parameter übergeben wird.



CPP

Karte Java






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

>

>

Ausgabe

True>

Anwendung :
Ermitteln Sie anhand einer Liste von Ganzzahlen die Summe aller Ganzzahlen.

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

Algorithmus
1. Überprüfen Sie, ob der Vektor leer ist. Wenn nicht, fügen Sie das hintere Element zu einer mit 0 initialisierten Variablen hinzu und fügen Sie das hintere Element ein.
2. Wiederholen Sie diesen Schritt, bis der Vektor leer ist.
3. Drucken Sie den Endwert der Variablen.

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

>

>

Ausgabe

26>
vector::size()

Die Funktion size() wird verwendet, um die Größe des Vektorcontainers oder die Anzahl der Elemente im Vektorcontainer zurückzugeben.
Syntax :

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

Beispiele:

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

Zeitkomplexität – Konstante O(1)

Fehler und Ausnahmen
1. Es gibt eine Ausnahmegarantie.
2. Zeigt einen Fehler an, wenn ein Parameter übergeben wird.

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

>

>

Ausgabe

5>

Warum wird empty() gegenüber size() bevorzugt?
Aufgrund einiger dieser Punkte wird oft gesagt, dass die Funktion empty() der Funktion size() vorgezogen wird:

  1. empty()-Funktion verwendet keine Vergleichsoperatoren , daher ist es bequemer zu verwenden
  2. Die Funktion empty() ist in konstanter Zeit umgesetzt , unabhängig vom Containertyp, während einige Implementierungen der Funktion size() O(n)-Zeitkomplexität erfordern, wie z. B. list::size().

Anwendung :
Ermitteln Sie anhand einer Liste von Ganzzahlen die Summe aller Ganzzahlen.

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

Algorithmus
1. Überprüfen Sie, ob die Größe des Vektors 0 ist. Wenn nicht, fügen Sie das hintere Element zu einer mit 0 initialisierten Variablen hinzu und fügen Sie das hintere Element ein.
2. Wiederholen Sie diesen Schritt, bis die Größe des Vektors 0 wird.
3. Drucken Sie den Endwert der Variablen.

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

>

>

Ausgabe

26>

Wir müssen bei der Verwendung von size() vorsichtig sein.

Betrachten Sie beispielsweise das folgende Programm:

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

>

>

Ausgabe

Geeks For Geeks>

Das obige Programm funktioniert gut, aber betrachten wir nun das folgende Programm:

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

>

>

Ausgabe:

Segmentierungsfehler SIGEGV

Durch das Kompilieren des obigen Programms erhalten wir einen Segmentierungsfehler (SIGSEGV), da der Rückgabetyp von size() size_t ist, was ein Alias ​​für unsigned long int.-> unsigned long int var = 0;-> cout istcout << vec.size() – 1; // Dies entspricht ebenfalls 18446744073709551615

also durchlaufen wir im obigen Programm eine Schleife von i = 0 bis i = 18446744073709551615

Stellen Sie sich nun das Szenario vor, in dem wir Elemente aus unserem initialisierten Container löschen und nach einer Reihe von Vorgängen unser Container leer wird und wir schließlich den Inhalt unseres Containers mit der oben genannten Methode drucken. Es wird auf jeden Fall zu einem Segmentierungsfehler (SIGSEGV) führen.

Wie man es repariert?

Es wird empfohlen, „container.size()“ in einen ganzzahligen Typ umzuwandeln, um einen Segmentierungsfehler (SIGSEGV) zu vermeiden.

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>

>

>

Ausgabe

Geeks For Geeks>