std::deque::erase
| (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.
Wszystkie iteratory i referencje zostają unieważnione chyba, że usuwane elementy znajdują się na końcu lub początku kontenera. W tym wypadku tylko iteratory i referencje do usuwanych elementów zostają unieważnione.
| Nie jest określone, czy iterator zakońcowy jest również unieważniony. | (do C++11) |
| Iterator past-the end również zostaje unieważniony chyba, że usuwane elementy znajdują się na początku kontenera a ostatni element nie zostaje usunięty. | (od C++11) |
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 nie większa niż liczba elementów przed usuwanymi elementami i elementów za usuwanymi elementami
Przykład
#include <deque>
#include <iostream>
int main( )
{
std::deque<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
Zobacz także
| czyści zawartość (publiczna metoda) |