Prerequisito: Vettore in C++
I 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::chiaro()
IL chiaro() La funzione viene utilizzata per rimuovere tutti gli elementi del contenitore vettoriale, rendendolo quindi di dimensione 0.
Sintassi:
vector_name .clear()>
parametri: Nessun parametro viene passato.
Risultato: Tutti gli elementi del vettore vengono rimossi (o distrutti).
Esempio:
Input: myvector= {1, 2, 3, 4, 5}; myvector.clear(); Output: myvector= {}>
C++
// C++ program to demonstrate> // Implementation of clear() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >miovettore;> > myvector.push_back(1);> > myvector.push_back(2);> > myvector.push_back(3);> > myvector.push_back(4);> > myvector.push_back(5);> > // Vector becomes 1, 2, 3, 4, 5> > myvector.clear();> > // vector becomes empty> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>
Produzione
No Output>
Complessità temporale: SU)
Spazio ausiliario: O(1)
Tutti gli elementi vengono distrutti uno per uno.
Errori ed eccezioni
- Non ha una garanzia di lancio senza eccezioni.
- Mostra un errore quando viene passato un parametro.
vettore::cancella()
cancellare() la funzione viene utilizzata per rimuovere elementi da un contenitore dalla posizione o dall'intervallo specificato.
Sintassi:
vector_name . erase( position ) ; for deletion at specific position vector_name . erase( starting_position , ending_position ) ; // for deletion in range>
parametri:
- Posizione dell'elemento da rimuovere sotto forma di iteratore.
- L'intervallo viene specificato utilizzando gli iteratori di inizio e fine.
Risultato: Gli elementi vengono rimossi dalla posizione specificata del contenitore.
Esempio:
Input : myvector= {1, 2, 3, 4, 5}, iterator= myvector.begin()+2 myvector.erase(iterator); Output : 1, 2, 4, 5 Input : myvector= {1, 2, 3, 4, 5, 6, 7, 8}, iterator1= myvector.begin()+3, iterator2= myvector.begin()+6 myvector.erase(iterator1, iterator2); Output : 1, 2, 3, 7, 8>
Rimozione UN elemento da UN posizione particolare
Esempio:
C++
// C++ program to demonstrate> // working of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >miovettore{ 1, 2, 3, 4, 5 };> > vector<> int> >::iteratore it;> > it = myvector.begin();> > myvector.erase(it);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>Produzione
esempio di classe Java
2 3 4 5>
Complessità temporale: SU)
Spazio ausiliario: O(1)
Rimozione di un elemento particolare
Per eliminare un particolare elemento in base al suo valore, dobbiamo innanzitutto conoscere la sua posizione e possiamo trovarlo utilizzando la funzione find()
Esempio:
C++
// C++ program to remove element based on its value> #include> using> namespace> std;> int> main()> {> > vector<> int> >vettore = { 1, 2, 3, 3, 4, 5 };> > cout <<> 'vector before deleting '> << endl;> > for> (> auto> element : vector) {> > cout << element <<> ' '> ;> > }> > // finding the position of the element in the vector> > int> valueToBeDeleted = 3;> > auto> it = find(vector.begin(), vector.end(),> > valueToBeDeleted);> > if> (it != vector.end()) {> > vector.erase(it);> > }> > cout << endl> > <<> 'Vector after deleting valueToBeDeleted '> > << endl;> > for> (> auto> element : vector) {> > cout << element <<> ' '> ;> > }> > cout << endl;> > return> 0;> }> |
>
>Produzione
vector before deleting 1 2 3 3 4 5 Vector after deleting valueToBeDeleted 1 2 3 4 5>
Rimozione di elementi all'interno di un intervallo
C++
// C++ program to demonstrate> // Implementation of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >miovettore{ 1, 2, 3, 4, 5 };> > vector<> int> >::iteratore it1, it2;> > it1 = myvector.begin();> > it2 = myvector.end();> > it2--;> > it2--;> > myvector.erase(it1, it2);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>Produzione
4 5>
Complessità temporale: SU)
Spazio ausiliario: O(1)
Rimozione di elementi di coppie di vettori
Esempio:
C++
#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& cosa) { cout<< '['; for (int i = 0; i cout << '{' << vec[i].first << ',' << vec[i].second << '}'; if (i cout << ', '; } cout << ']' << endl; } int main() { vectorint, string>> x = { { 1, 'mela' }, { 2, 'banana' }, { 3, 'ciliegia' }, { 4, 'Guava' } }; // Rimuove l'elemento nella posizione 1 (indice 0) x.erase(x.begin()); stampa(x); // Stampa [{2,banana}, {3,cherry}, {4,Guava}] // Rimuove gli elementi nelle posizioni 0 e 1 (indici 0 // e 1) x.erase(x.begin(), x.inizio() + 2); stampa(x); // Stampa [{4,Guava}] // Cancella il vettore x.clear(); stampa(x); // Non stampa nulla (solo parentesi vuote) return 0; } // Questo codice è un contributo di Susobhan Akhuli> |
>
>Produzione
[{2,banana}, {3,cherry}, {4,Guava}] [{4,Guava}] []>
Complessità temporale: SU)
Spazio ausiliario: O(1)
Errori ed eccezioni
- Non ha alcuna garanzia di eccezione se la posizione è valida.
- Altrimenti mostra un comportamento indefinito.
Applicazione
Data una lista di numeri interi, rimuovi tutti gli elementi pari dal vettore e stampa il vettore.
Ingresso:
1, 2, 3, 4, 5, 6, 7, 8, 9>
Produzione:
1 3 5 7 9>
Spiegazione: 2, 4, 6 e 8 che sono pari e cancellati dal vettore
Algoritmo
- Esegui un ciclo alla dimensione del vettore.
- Controlla se l'elemento in ciascuna posizione è divisibile per 2, in caso affermativo, rimuovi l'elemento e decrementa l'iteratore.
- Stampa il vettore finale.
Il programma seguente implementa l'approccio di cui sopra.
C++
// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >miovettore{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };> > for> (> auto> i = myvector.begin(); i != myvector.end();> > ++i) {> > if> (*i % 2 == 0) {> > myvector.erase(i);> > i--;> > }> > }> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>Produzione
1 3 5 7 9>
Complessità temporale: O(N) nel peggiore dei casi poiché la cancellazione richiede tempo lineare.
clear() vs erase(), quando usare cosa?
chiaro() rimuove tutti gli elementi da un contenitore vettoriale, rendendolo quindi di dimensione 0. Tutti gli elementi del vettore vengono rimossi utilizzando il chiaro() funzione.
cancellare() La funzione, invece, viene utilizzata per rimuovere elementi specifici dal contenitore o una serie di elementi dal contenitore, riducendone così le dimensioni in base al numero di elementi rimossi.