logo

vettore::empty() e vettore::size() in C++ STL

Vettori sono gli stessi degli array dinamici con la possibilità di ridimensionarsi automaticamente quando un elemento viene inserito o eliminato, con la loro archiviazione gestita automaticamente dal contenitore.

vettore::vuoto()

La funzione empty() viene utilizzata per verificare se il contenitore del vettore è vuoto o meno.
Sintassi:



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

Esempi:

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

Complessità temporale – Costante O(1)

Errori ed eccezioni
1. Non ha alcuna garanzia di lancio eccezionale.
2. Mostra un errore quando viene passato un parametro.



stringa su int in Java

CPP






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

>

>

Produzione

True>

Applicazione :
Data una lista di numeri interi, trova la somma di tutti i numeri interi.

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

Algoritmo
1. Controlla se il vettore è vuoto, in caso contrario aggiungi l'elemento back a una variabile inizializzata come 0 e fai apparire l'elemento back.
2. Ripetere questo passaggio finché il vettore non sarà vuoto.
3. Stampa il valore finale della variabile.

CPP




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

>

>

Produzione

26>
vettore::dimensione()

La funzione size() viene utilizzata per restituire la dimensione del contenitore vettoriale o il numero di elementi nel contenitore vettoriale.
Sintassi:

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

Esempi:

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

Complessità temporale – Costante O(1)

Errori ed eccezioni
1. Non ha alcuna garanzia di lancio eccezionale.
2. Mostra un errore quando viene passato un parametro.

CPP




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

>

>

Produzione

5>

Perché vuoto() è preferito a dimensione()
Si dice spesso che la funzione empty() sia preferita rispetto alla funzione size() a causa di alcuni di questi punti:

  1. funzione vuota() non utilizza alcun operatore di confronto , quindi è più comodo da usare
  2. la funzione vuota() è implementato in tempo costante , indipendentemente dal tipo di contenitore, mentre alcune implementazioni della funzione size() richiedono una complessità temporale O(n) come list::size().

Applicazione :
Data una lista di numeri interi, trova la somma di tutti i numeri interi.

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

Algoritmo
1. Controlla se la dimensione del vettore è 0, in caso contrario aggiungi l'elemento back a una variabile inizializzata come 0 e fai apparire l'elemento back.
2. Ripeti questo passaggio finché la dimensione del vettore diventa 0.
3. Stampa il valore finale della variabile.

CPP




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

>

>

Produzione

1nf 2nf 3nf
26>

Dobbiamo fare attenzione durante l'utilizzo di size().

Consideriamo ad esempio il seguente programma:

C++


rimuovere il primo carattere in Excel



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

>

>

Produzione

Geeks For Geeks>

Il programma sopra funziona bene, ma ora consideriamo il seguente programma:

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

>

>

Produzione:

Errore di segmentazione SIGEGV

Compilando il programma sopra, otteniamo Segmentation Fault (SIGSEGV) perché il tipo restituito da size() è size_t che è un alias per unsigned long int.-> unsigned long int var = 0;-> coutcout << vec.dimensione() – 1; // Anche questo sarà uguale a 18446744073709551615

quindi stiamo eseguendo il loop da i = 0 a i = 18446744073709551615 nel programma sopra

jlist

Consideriamo ora lo scenario in cui stiamo eliminando elementi dal nostro contenitore inizializzato e dopo una sequenza di operazioni il nostro contenitore si svuota e, infine, stiamo stampando il contenuto del nostro contenitore utilizzando il metodo sopra. Sicuramente, porterà a Segmentation Fault (SIGSEGV).

Come sistemarlo?

È consigliabile convertire container.size() in un tipo intero per evitare 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>

>

>

Produzione

Geeks For Geeks>