std::vector::erase – cppreference.com
Z cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
| (1) | ||
|
|
(do C++11) | |
|
|
(od C++11) | |
| (2) | ||
|
|
(do C++11) | |
|
|
(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).
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. | ||
Zwracana wartość
Iterator za ostatni usunięty element. Jeśli pos odnosi się do ostatniego elementu, zwracany jest element zakońcowy end().
Wyjątki
Nie wyrzuca, o ile nie wyrzuci wyjątku operator przypisania T.
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
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