logo

vector erase() en clear() in C++

Voorwaarde: Vectorteken in C++

Vectoren zijn hetzelfde als dynamische arrays met de mogelijkheid om de grootte automatisch aan te passen wanneer een element wordt ingevoegd of verwijderd, waarbij de opslag ervan automatisch door de container wordt afgehandeld.



vector::clear()

De duidelijk() functie wordt gebruikt om alle elementen van de vectorcontainer te verwijderen, waardoor deze maat 0 krijgt.

Syntaxis:

 vector_name .clear()>

Parameters: Er worden geen parameters doorgegeven.



Resultaat: Alle elementen van de vector worden verwijderd (of vernietigd).

Voorbeeld:

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

>

>

Uitvoer

 No Output>

Tijdcomplexiteit: OP)
Hulpruimte: O(1)
Alle elementen worden één voor één vernietigd.

Fouten en uitzonderingen

  1. Het heeft een werpgarantie zonder uitzondering.
  2. Er wordt een fout weergegeven wanneer een parameter wordt doorgegeven.

vector::wissen()

wissen() functie wordt gebruikt om elementen uit een container te verwijderen vanaf de opgegeven positie of bereik.

Syntaxis:

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

Parameters:

  • Positie van het te verwijderen element in de vorm van een iterator.
  • Het bereik wordt gespecificeerd met behulp van start- en einditeratoren.

Resultaat: Elementen worden verwijderd uit de opgegeven positie van de container.

Voorbeeld:

 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>

Verwijderen een element uit A bepaalde positie

Voorbeeld:

C++




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

>

>

Uitvoer

maven-opslagplaats
 2 3 4 5>

Tijdcomplexiteit: OP)
Hulpruimte: O(1)

Een bepaald element verwijderen

Om een ​​bepaald element te verwijderen op basis van zijn waarde, moeten we eerst de positie ervan kennen en kunnen we het vinden met de functie find()

Voorbeeld:

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

>

>

Uitvoer

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

Elementen binnen een bereik verwijderen

C++




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

>

>

Uitvoer

 4 5>

Tijdcomplexiteit: OP)
Hulpruimte: O(1)

Vectorpaarelementen verwijderen

Voorbeeld:

C++




#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& ding) { cout<< '['; for (int i = 0; i cout << '{' << vec[i].first << ',' << vec[i].second << '}'; if (i cout << ', '; } cout << ']' << endl; } int main() { vectorint, string>> x = { { 1, 'appel' }, { 2, 'banaan' }, { 3, 'kers' }, { 4, 'Guave' } }; // Verwijder het element op positie 1 (index 0) x.erase(x.begin()); afdrukken(x); // Print [{2,banana}, {3,cherry}, {4,Guava}] // Verwijder de elementen op posities 0 en 1 (indexen 0 // en 1) x.erase(x.begin(), x.begin() + 2); afdrukken(x); // Print [{4,Guava}] // Wis de vector x.clear(); afdrukken(x); // Druk niets af (alleen lege haakjes) return 0; } // Deze code is bijgedragen door Susobhan Akhuli>

>

>

Uitvoer

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

Tijdcomplexiteit: OP)
Hulpruimte: O(1)

Fouten en uitzonderingen

  1. Er is geen uitzonderingsworpgarantie als de positie geldig is.
  2. Vertoont verder ongedefinieerd gedrag.

Sollicitatie

Gegeven een lijst met gehele getallen, verwijder alle even elementen uit de vector en druk de vector af.

Invoer:

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

Uitgang:

1 3 5 7 9>

Uitleg: 2, 4, 6 en 8 die even zijn en uit de vector zijn gewist

Algoritme

  1. Voer een lus uit ter grootte van de vector.
  2. Controleer of het element op elke positie deelbaar is door 2. Zo ja, verwijder het element en verlaag de iterator.
  3. Druk de uiteindelijke vector af.

Het onderstaande programma implementeert de bovenstaande aanpak.

C++




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

>

>

Uitvoer

 1 3 5 7 9>

Tijdcomplexiteit: O(N) in het ergste geval, aangezien het wissen lineaire tijd in beslag neemt.

clear() versus erase(), wanneer moet je wat gebruiken?

duidelijk() verwijdert alle elementen uit een vectorcontainer, waardoor de grootte 0 wordt. Alle elementen van de vector worden verwijderd met behulp van de duidelijk() functie.

wissen() De functie wordt daarentegen gebruikt om specifieke elementen uit de container of een reeks elementen uit de container te verwijderen, waardoor de omvang ervan wordt verkleind met het aantal verwijderde elementen.