Wektory są takie same jak tablice dynamiczne z możliwością automatycznej zmiany rozmiaru po wstawieniu lub usunięciu elementu, a ich przechowywanie jest obsługiwane automatycznie przez kontener.
Funkcja pusty() służy do sprawdzania, czy kontener wektorów jest pusty, czy nie.
Składnia:
vectorname .empty() Parameters : No parameters are passed. Returns : True, if vector is empty False, Otherwise>
Przykłady:
Input : myvector = 1, 2, 3, 4, 5 myvector.empty(); Output : False Input : myvector = {} myvector.empty(); Output : True> Złożoność czasowa – Stała O(1)
kolekcja Javy
Błędy i wyjątki
1. Nie ma wyjątku gwarancji rzutu.
2. Pokazuje błąd po przekazaniu parametru.
CPP
// CPP program to illustrate> // Implementation of empty() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>mójwektor{};> >if> (myvector.empty())> >{> >cout <<>'True'>;> >}> >else> {> >cout <<>'False'>;> >}> >return> 0;> }> |
>
>Wyjście
True>
Aplikacja :
Mając listę liczb całkowitych, znajdź sumę wszystkich liczb całkowitych.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>
Algorytm
1. Sprawdź, czy wektor jest pusty, jeśli nie, dodaj element tylny do zmiennej zainicjowanej jako 0 i wstaw element tylny.
2. Powtarzaj ten krok, aż wektor będzie pusty.
3. Wydrukuj końcową wartość zmiennej.
CPP
// CPP program to illustrate> // Application of empty() function> #include> #include> using> namespace> std;> int> main()> {> >int> sum = 0;> >vector<>int>>mójwektor{ 1, 5, 6, 3, 9, 2 };> >while> (!myvector.empty())> >{> >sum = sum + myvector.back();> >myvector.pop_back();> >}> >cout << sum;> >return> 0;> }> |
>
>Wyjście
26>wektor::rozmiar()
Funkcja size() służy do zwracania rozmiaru kontenera wektorów lub liczby elementów w kontenerze wektorów.
Składnia:
tff
vectorname .size() Parameters : No parameters are passed. Returns : Number of elements in the container.>
Przykłady:
Input : myvector = 1, 2, 3, 4, 5 myvector.size(); Output : 5 Input : myvector = {} myvector.size(); Output : 0> Złożoność czasu – Stała O(1)
Błędy i wyjątki
1. Nie ma wyjątku gwarancji rzutu.
2. Pokazuje błąd po przekazaniu parametru.
CPP
// CPP program to illustrate> // Implementation of size() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>mójwektor{ 1, 2, 3, 4, 5 };> >cout << myvector.size();> >return> 0;> }> |
>
>Wyjście
5>
Dlaczego pusta() jest preferowana zamiast size()
Często mówi się, że funkcja pusta() jest preferowana w stosunku do funkcji size() ze względu na niektóre z tych punktów:
- funkcja pusta(). nie używa żadnych operatorów porównania , dzięki czemu jest wygodniejszy w użyciu
- Funkcja pusta() jest realizowane w stałym czasie , niezależnie od typu kontenera, podczas gdy niektóre implementacje funkcji size() wymagają złożoności czasowej O(n), np. list::size().
Aplikacja :
Mając listę liczb całkowitych, znajdź sumę wszystkich liczb całkowitych.
Input : 1, 5, 6, 3, 9, 2 Output : 26 Explanation - 1+5+6+3+9+2 = 26>
Algorytm
1. Sprawdź, czy rozmiar wektora wynosi 0, jeśli nie, dodaj tylny element do zmiennej zainicjowanej jako 0 i wstaw tylny element.
2. Powtarzaj ten krok, aż rozmiar wektora osiągnie 0.
3. Wydrukuj końcową wartość zmiennej.
CPP
// CPP program to illustrate> // Application of size() function> #include> #include> using> namespace> std;> int> main()> {> >int> sum = 0;> >vector<>int>>mójwektor{ 1, 5, 6, 3, 9, 2 };> >while> (myvector.size()>0) {> >sum = sum + myvector.back();> >myvector.pop_back();> >}> >cout << sum;> >return> 0;> }> |
>
>Wyjście
26>
Musimy zachować ostrożność podczas używania size().
Rozważmy na przykład następujący program:
C++
ciąg znaków w tablicy 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;> }> |
>
>Wyjście
Geeks For Geeks>
Powyższy program działa dobrze, ale teraz rozważmy następujący 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;> }> |
>
>
Wyjście:
Błąd segmentacji SIGEGV
Kompilując powyższy program, otrzymujemy błąd segmentacji (SIGSEGV), ponieważ typem zwracanym przez size() jest size_t, który jest aliasem dla unsigned long int.-> unsigned long int var = 0;-> cout
więc w powyższym programie wykonujemy pętlę od i = 0 do i = 18446744073709551615
Rozważmy teraz scenariusz, w którym usuwamy elementy z naszego zainicjowanego kontenera, po sekwencji operacji nasz kontener staje się pusty i na koniec drukujemy zawartość naszego kontenera przy użyciu powyższej metody. Zdecydowanie doprowadzi to do błędu segmentacji (SIGSEGV).
Jak to naprawić?
Zaleca się rzutowanie kontenera.size() na typ całkowity, aby uniknąć błędu segmentacji (SIGSEGV).
zajebisty język
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> |
>
>Wyjście
Geeks For Geeks>