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

Předpoklad: Vektor v C++

Vektory jsou stejné jako dynamická pole s možností automatické změny velikosti, když je prvek vložen nebo odstraněn, s jejich ukládáním, které automaticky zpracovává kontejner.

vector::clear()

The Průhledná() Funkce se používá k odstranění všech prvků vektorového kontejneru, čímž je velikost 0.

Syntax:

 vector_name .clear() 

Parametry: Nejsou předány žádné parametry.

Výsledek: Všechny prvky vektoru jsou odstraněny (nebo zničeny).

Pří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ýstup

 No Output 

Časová náročnost: NA)
Pomocný prostor: O(1)
Všechny prvky jsou zničeny jeden po druhém.

Chyby a výjimky

  1. Nemá žádnou výjimku záruku házení.
  2. Při předání parametru zobrazí chybu.

vector::erase()

vymazat() Funkce se používá k odstranění prvků z kontejneru ze zadané pozice nebo rozsahu.

Syntax:

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

Parametry:

  • Poloha prvku, který má být odstraněn ve formě iterátoru.
  • Rozsah je specifikován pomocí iterátorů začátku a konce.

Výsledek: Prvky jsou odstraněny ze zadané polohy kontejneru.

Pří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 

Odebírání an prvek z A konkrétní pozici

Příklad:

C++




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

 2 3 4 5 

Časová náročnost: NA)
Pomocný prostor: O(1)

Odstranění konkrétního prvku

Chcete-li odstranit konkrétní prvek na základě jeho hodnoty, musíme nejprve vědět o jeho poloze a můžeme jej najít pomocí funkce find()

Pří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ýstup

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

Odstranění prvků v rozsahu

C++




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

 4 5 

Časová náročnost: NA)
Pomocný prostor: O(1)

Odebrání prvků vektorového páru

Příklad:

C++




#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& věc) { 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, 'třešeň' }, { 4, 'Kvajáva' } }; // Odebere prvek na pozici 1 (index 0) x.erase(x.begin()); print(x); // Tisk [{2,banana}, {3,cherry}, {4,Guava}] // Odstraňte prvky na pozicích 0 a 1 (indexy 0 // a 1) x.erase(x.begin(), x.begin() + 2); print(x); // Tisk [{4,Guava}] // Vymazání vektoru x.clear(); print(x); // Netiskne nic (pouze prázdné závorky) return 0; } // Tento kód přispěl Susobhan Akhuli>

Výstup

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

Časová náročnost: NA)
Pomocný prostor: O(1)

Chyby a výjimky

  1. Pokud je pozice platná, nemá žádnou záruku házení.
  2. Jinak ukazuje nedefinované chování.

aplikace

Máte-li seznam celých čísel, odstraňte z vektoru všechny sudé prvky a vytiskněte vektor.

Vstup:

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

Výstup:

1 3 5 7 9 

Vysvětlení: 2, 4, 6 a 8, které jsou sudé a vymazané z vektoru

Algoritmus

  1. Spusťte smyčku na velikost vektoru.
  2. Zkontrolujte, zda je prvek na každé pozici dělitelný 2, pokud ano, odeberte prvek a dekrementujte iterátor.
  3. Vytiskněte konečný vektor.

Níže uvedený program implementuje výše uvedený přístup.

C++




// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >můj vektor{ 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ýstup

 1 3 5 7 9 

Časová náročnost: O(N) v nejhorším případě, protože mazání trvá lineárně.

clear() vs erase(), kdy co použít?

Průhledná() odebere všechny prvky z vektorového kontejneru, takže jeho velikost bude 0. Všechny prvky vektoru se odstraní pomocí Průhledná() funkce.

vymazat() Funkce se na druhé straně používá k odstranění určitých prvků z kontejneru nebo řady prvků z kontejneru, čímž se jeho velikost zmenšuje o počet odstraněných prvků.