logo

vector erase() a clear() v C++

Predpoklad: Vektor v C++

Vektory sú rovnaké ako dynamické polia s možnosťou automatickej zmeny veľkosti, keď je prvok vložený alebo odstránený, pričom ich ukladanie automaticky spracováva kontajner.



vector::clear()

The jasný() funkcia sa používa na odstránenie všetkých prvkov vektorového kontajnera, vďaka čomu má veľkosť 0.

Syntax:

 vector_name .clear()>

Parametre: Nie sú odovzdané žiadne parametre.



výsledok: Všetky prvky vektora sú odstránené (alebo zničené).

Príklad:

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

>

>

Výkon

 No Output>

Časová zložitosť: O(N)
Pomocný priestor: O(1)
Všetky prvky sú zničené jeden po druhom.

Chyby a výnimky

  1. Nemá žiadnu záruku hádzania.
  2. Pri odovzdaní parametra sa zobrazí chyba.

vector::erase()

vymazať() funkcia sa používa na odstránenie prvkov z kontajnera zo zadanej pozície alebo rozsahu.

Syntax:

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

Parametre:

  • Poloha prvku, ktorý sa má odstrániť vo forme iterátora.
  • Rozsah je špecifikovaný pomocou iterátorov začiatku a konca.

výsledok: Prvky sú odstránené z určenej polohy kontajnera.

Príklad:

 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>

Odstraňuje sa an prvok z a konkrétnu pozíciu

Príklad:

C++




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

>

>

Výkon

kedy končí q1
 2 3 4 5>

Časová zložitosť: O(N)
Pomocný priestor: O(1)

Odstránenie konkrétneho prvku

Ak chcete odstrániť konkrétny prvok na základe jeho hodnoty, najprv musíme vedieť o jeho polohe a môžeme ho nájsť pomocou funkcie find()

Príklad:

C++




// C++ program to remove element based on its value> #include> using> namespace> std;> int> main()> {> >vector<>int>>vektor = { 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;> }>

>

>

Výkon

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

Odstránenie prvkov v rámci rozsahu

C++




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

>

>

Výkon

 4 5>

Časová zložitosť: O(N)
Pomocný priestor: O(1)

Odstránenie prvkov vektorového páru

Príklad:

C++




#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& vec) { cout<< '['; for (int i = 0; i cout << '{' << vec[i].first << ',' << vec[i].second << '}'; if (i cout << ', '; } cout << ']' << endl; } int main() { vectorint, string>> x = { { 1, 'jablko' }, { 2, 'banán' }, { 3, 'čerešňa' }, { 4, 'Guava' } }; // Odstránenie prvku na pozícii 1 (index 0) x.erase(x.begin()); print(x); // Tlač [{2,banana}, {3,cherry}, {4,Guava}] // Odstráňte prvky na pozíciách 0 a 1 (indexy 0 // a 1) x.erase(x.begin(), x.begin() + 2); print(x); // Tlač [{4,Guava}] // Vymazanie vektora x.clear(); print(x); // Netlačiť nič (iba prázdne zátvorky) return 0; } // Tento kód prispel Susobhan Akhuli>

>

>

Výkon

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

Časová zložitosť: O(N)
Pomocný priestor: O(1)

Chyby a výnimky

  1. Ak je pozícia platná, nemá žiadnu záruku hádzania.
  2. V opačnom prípade vykazuje nedefinované správanie.

Aplikácia

Ak máte zoznam celých čísel, odstráňte z vektora všetky párne prvky a vytlačte vektor.

Vstup:

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

Výkon:

1 3 5 7 9>

Vysvetlenie: 2, 4, 6 a 8, ktoré sú párne a vymazané z vektora

Algoritmus

  1. Spustite slučku na veľkosť vektora.
  2. Skontrolujte, či je prvok na každej pozícii deliteľný 2, ak áno, odstráňte prvok a dekrementujte iterátor.
  3. Vytlačte konečný vektor.

Nižšie uvedený program implementuje vyššie uvedený prístup.

C++




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

>

>

Výkon

 1 3 5 7 9>

Časová zložitosť: O(N) v najhoršom prípade, pretože vymazanie trvá lineárne.

clear() vs erase(), kedy čo použiť?

jasný() odstráni všetky prvky z vektorového kontajnera, čím sa jeho veľkosť zmení na 0. Všetky prvky vektora sa odstránia pomocou jasný() funkciu.

vymazať() Na druhej strane sa funkcia používa na odstránenie špecifických prvkov z kontajnera alebo radu prvkov z kontajnera, čím sa jeho veľkosť zníži o počet odstránených prvkov.