Requisit previ: Vector en C++
Els vectors són els mateixos que les matrius dinàmiques amb la possibilitat de redimensionar-se automàticament quan s'insereix o s'elimina un element, i el contenidor gestiona el seu emmagatzematge automàticament.
vector::clar()
El clar () La funció s'utilitza per eliminar tots els elements del contenidor vectorial, fent-lo de mida 0.
Sintaxi:
vector_name .clear()>
Paràmetres: No es passa cap paràmetre.
Resultat: Tots els elements del vector s'eliminen (o es destrueixen).
Exemple:
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> >el meuvector;> > 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;> }> |
>
>
Sortida
No Output>
Complexitat temporal: O(N)
Espai auxiliar: O(1)
Tots els elements es destrueixen un per un.
Errors i excepcions
- No té cap excepció garantia de llançament.
- Mostra un error quan es passa un paràmetre.
vector::erase()
esborra () La funció s'utilitza per eliminar elements d'un contenidor de la posició o rang especificats.
Sintaxi:
vector_name . erase( position ) ; for deletion at specific position vector_name . erase( starting_position , ending_position ) ; // for deletion in range>
Paràmetres:
- Posició de l'element a eliminar en forma d'iterador.
- L'interval s'especifica mitjançant iteradors inicial i final.
Resultat: Els elements s'eliminen de la posició especificada del contenidor.
Exemple:
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>
Eliminant un element de a posició particular
Exemple:
C++
// C++ program to demonstrate> // working of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >el meuvector{ 1, 2, 3, 4, 5 };> > vector<> int> >::iterador;> > it = myvector.begin();> > myvector.erase(it);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>Sortida
arbre de cerca binari]
2 3 4 5>
Complexitat temporal: O(N)
Espai auxiliar: O(1)
Eliminació d'un element concret
Per suprimir un element determinat en funció del seu valor, primer, hem de conèixer la seva posició i podem trobar-lo mitjançant la funció find()
Exemple:
C++
// C++ program to remove element based on its value> #include> using> namespace> std;> int> main()> {> > vector<> int> >vector = { 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;> }> |
>
>Sortida
vector before deleting 1 2 3 3 4 5 Vector after deleting valueToBeDeleted 1 2 3 4 5>
Eliminació d'elements dins d'un interval
C++
// C++ program to demonstrate> // Implementation of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >el meuvector{ 1, 2, 3, 4, 5 };> > vector<> int> >::iterador 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;> }> |
>
>Sortida
4 5>
Complexitat temporal: O(N)
Espai auxiliar: O(1)
Eliminació d'elements de parell de vectors
Exemple:
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, 'poma' }, { 2, 'plàtan' }, { 3, 'cirera' }, { 4, 'Guava' } }; // Elimina l'element a la posició 1 (índex 0) x.erase(x.begin()); imprimir(x); // Imprimeix [{2,banana}, {3,cherry}, {4,Guava}] // Elimina els elements a les posicions 0 i 1 (índexs 0 // i 1) x.erase(x.begin(), x.begin() + 2); imprimir(x); // Imprimeix [{4,Guava}] // Esborra el vector x.clear(); imprimir(x); // No imprimeix res (només claudàtors buits) retorna 0; } // Aquest codi és aportat per Susobhan Akhuli>>> |
>[{2,banana}, {3,cherry}, {4,Guava}] [{4,Guava}] []>
Complexitat temporal: O(N)
Espai auxiliar: O(1)
Errors i excepcions
- No té cap excepció garantia de llançament si la posició és vàlida.
- Mostra un comportament indefinit en cas contrari.
Aplicació
Donada una llista de nombres enters, elimineu tots els elements parells del vector i imprimiu el vector.
Entrada:
1, 2, 3, 4, 5, 6, 7, 8, 9>
Sortida:
1 3 5 7 9>
Explicació: 2, 4, 6 i 8 que són parells i esborrats del vector
Algoritme
- Executeu un bucle a la mida del vector.
- Comproveu si l'element a cada posició és divisible per 2, en cas afirmatiu, traieu l'element i disminuïu l'iterador.
- Imprimeix el vector final.
El programa següent implementa l'enfocament anterior.
C++
// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >el meuvector{ 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;> }> |
>
>Sortida
1 3 5 7 9>
Complexitat temporal: O(N) en el pitjor dels casos, ja que un esborrat triga un temps lineal.
clear () vs esborrar (), quan utilitzar què?
clar () elimina tots els elements d'un contenidor vectorial, fent que la seva mida sigui 0. Tots els elements del vector s'eliminen mitjançant el clar () funció.
esborra () funció, en canvi, s'utilitza per eliminar elements específics del contenidor o una sèrie d'elements del contenidor, reduint així la seva mida en el nombre d'elements eliminats.