Przestrzenie nazw
Warianty
Działania

std::vector::erase

Z cppreference.com
< cpp‎ | container‎ | vector
(1)
iterator erase( iterator pos );
(do C++11)
iterator erase( const_iterator pos );
(od C++11)
(2)
iterator erase( iterator first, iterator last );
(do C++11)
iterator erase( const_iterator first, const_iterator last );
(od C++11)

Usuwa wskazane elementy z kontenera.

1) Usuwa element z pozycji pos.
2) Usuwa elementy w zakresie [first; last).

Unieważnia iteratory i referencje od miejsca usuwania do końca kontenera, wliczając iterator end().

Iterator pos musi być poprawny i dać się zdereferencjować. Stąd też iterator zakońcowy end() (który jest poprawny, ale nie dereferencjowalny) nie może być użyty jako wartość pos.

Iterator first nie musi dać się zdereferencjować, jeśli first==last (przy usuwaniu pustego zakresu).

Spis treści

[edytuj] Parametry

pos - iterator na element do usunięcia
first, last - zakres elementów do usunięcia
Wymagania względem typów
-
T musi spełniać wymagania MoveAssignable.

[edytuj] Zwracana wartość

Iterator za ostatni usunięty element. Jeśli pos odnosi się do ostatniego elementu, zwracany jest element zakońcowy end().

[edytuj] Wyjątki

Nie wyrzuca, o ile nie wyrzuci wyjątku operator przypisania T.

[edytuj] Złożoność

Liniowa: liczba wywołań destruktora T jest taka sama jak liczba usuwanych elementów, liczba wywołań operatora przypisania T jest równa liczbie elementów w wektorze za usuwanymi elementami

[edytuj] Przykład

#include <vector>
#include <iostream>
 
 
int main( )
{
    std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    c.erase(c.begin());
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    c.erase(c.begin()+2, c.begin()+5);
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    // Usuwa wszystkie liczby parzyste (C++11 i późniejsze)
    for (auto it = c.begin(); it != c.end(); ) {
        if (*it % 2 == 0) {
            it = c.erase(it);
        } else {
            ++it;
        }
    }
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
}

Wynik:

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

[edytuj] Zobacz także

czyści zawartość
(publiczna metoda) [edit]