logo

vector erase() și clear() în C++

Condiție preliminară: Vector în C++

Vectorii sunt la fel ca și matricele dinamice, având capacitatea de a se redimensiona automat atunci când un element este inserat sau șters, stocarea lor fiind gestionată automat de container.



vector::clear()

The clar() funcția este utilizată pentru a elimina toate elementele containerului vectorial, făcând astfel dimensiunea 0.

Sintaxă:

 vector_name .clear()>

Parametri: Nu sunt transmise parametri.



Rezultat: Toate elementele vectorului sunt eliminate (sau distruse).

Exemplu:

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

>

>

Ieșire

 No Output>

Complexitatea timpului: PE)
Spațiu auxiliar: O(1)
Toate elementele sunt distruse unul câte unul.

Erori și excepții

  1. Nu are o garanție de aruncare fără excepție.
  2. Afișează o eroare atunci când este transmis un parametru.

vector::erase()

şterge() funcția este utilizată pentru a elimina elemente dintr-un container din poziția sau intervalul specificat.

Sintaxă:

 vector_name . erase( position ) ; for deletion at specific position vector_name . erase( starting_position , ending_position ) ; // for deletion in range>

Parametri:

  • Poziția elementului de eliminat sub forma unui iterator.
  • Intervalul este specificat folosind iteratorii de început și de sfârșit.

Rezultat: Elementele sunt îndepărtate din poziția specificată a containerului.

Exemplu:

 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>

Îndepărtarea un element din A poziţie particulară

Exemplu:

C++




// C++ program to demonstrate> // working of erase() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>vectorul meu{ 1, 2, 3, 4, 5 };> >vector<>int>>::iterator it;> >it = myvector.begin();> >myvector.erase(it);> >// Printing the Vector> >for> (>auto> it = myvector.begin(); it != myvector.end();> >++it)> >cout <<>' '> << *it;> >return> 0;> }>

>

>

Ieșire

expresie regulată în java
 2 3 4 5>

Complexitatea timpului: PE)
Spațiu auxiliar: O(1)

Eliminarea unui anumit element

Pentru a șterge un anumit element pe baza valorii sale, mai întâi, trebuie să știm despre poziția sa și îl putem găsi folosind funcția find()

Exemplu:

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

>

>

Ieșire

vector before deleting 1 2 3 3 4 5 Vector after deleting valueToBeDeleted 1 2 3 4 5>

Eliminarea elementelor dintr-un interval

C++




// C++ program to demonstrate> // Implementation of erase() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>vectorul meu{ 1, 2, 3, 4, 5 };> >vector<>int>>::iterator 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;> }>

>

>

Ieșire

 4 5>

Complexitatea timpului: PE)
Spațiu auxiliar: O(1)

Eliminarea elementelor perechilor vectoriale

Exemplu:

C++




#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& lucru) { cout<< '['; for (int i = 0; i cout << '{' << vec[i].first << ',' << vec[i].second << '}'; if (i cout << ', '; } cout << ']' << endl; } int main() { vectorint, string>> x = { { 1, 'măr' }, { 2, 'banana' }, { 3, 'cireș' }, { 4, 'Guava' } }; // Îndepărtează elementul din poziţia 1 (index 0) x.erase(x.begin()); print(x); // Tipăriți [{2,banana}, {3,cireș}, {4,Guava}] // Îndepărtați elementele de la pozițiile 0 și 1 (indexurile 0 // și 1) x.erase(x.begin(), x.begin() + 2); print(x); // Print [{4,Guava}] // Șterge vectorul x.clear(); print(x); // Imprimă nimic (doar paranteze goale) returnează 0; } // Acest cod este contribuit de Susobhan Akhuli>

>

>

Ieșire

[{2,banana}, {3,cherry}, {4,Guava}] [{4,Guava}] []>

Complexitatea timpului: PE)
Spațiu auxiliar: O(1)

Erori și excepții

  1. Nu are nicio excepție garantarea aruncării dacă poziția este validă.
  2. În caz contrar, arată un comportament nedefinit.

Aplicație

Având în vedere o listă de numere întregi, eliminați toate elementele pare din vector și imprimați vectorul.

Intrare:

1, 2, 3, 4, 5, 6, 7, 8, 9>

Ieșire:

1 3 5 7 9>

Explicaţie: 2, 4, 6 și 8 care sunt pare și șterse din vector

Algoritm

  1. Rulați o buclă la dimensiunea vectorului.
  2. Verificați dacă elementul din fiecare poziție este divizibil cu 2, dacă da, eliminați elementul și reduceți iteratorul.
  3. Tipăriți vectorul final.

Programul de mai jos implementează abordarea de mai sus.

C++




// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> >vector<>int>>vectorul meu{ 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;> }>

>

>

Ieșire

 1 3 5 7 9>

Complexitatea timpului: O(N) în cel mai rău caz, deoarece o ștergere necesită timp liniar.

clear() vs erase(), când să folosești ce?

clar() elimină toate elementele dintr-un container vectorial, făcând astfel dimensiunea acestuia la 0. Toate elementele vectorului sunt îndepărtate folosind clar() funcţie.

şterge() funcția, pe de altă parte, este utilizată pentru a îndepărta anumite elemente din container sau o serie de elemente din container, reducându-i astfel dimensiunea cu numărul de elemente îndepărtate.