std::vector<T,Allocator>::erase - cppreference.com
De cppreference.com
</tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody>
| (1) | ||
|
|
(hasta C++11) | |
|
|
(desde C++11) (hasta C++20) |
|
|
|
(desde C++20) | |
| (2) | ||
|
|
(hasta C++11) | |
|
|
(desde C++11) (hasta C++20) |
|
|
|
(desde C++20) | |
Elimina los elementos especificados del contenedor.
1) Elimina el elemento en pos.
2) Elimina los elementos en el rango [first; last).
Invalida los iteradores y referencias en el, o después del, punto de eliminación, incluyendo el iterador end().
El iterador pos debe ser válido y desreferenciable. Es por esto que el iterador end() (que es válido, pero no es desreferenciable) no puede usarse si first==last: eliminar un rango vacío es una no-operación.
Parámetros
| pos | - | Iterador al elemento a eliminar |
| first, last | - | Rango de elementos a eliminar |
| Requisitos de tipo | ||
-T debe satisfacer los requisitos de MoveAssignable.
| ||
Valor de retorno
El iterador que sigue al último elemento eliminado.
Si pos se refiere al último elemento, entonces se devuelve el iterador end().
Si last==end() antes de la eliminación, entonces se devuelve el iterador actualizado end().
Si [first, last) es un rango vacío, entonces se devuelve last.
Excepciones
No lanza a menos que se lance una excepción por el operador de asignación de T.
Complejidad
Lineal: el número de llamadas al destructor de T es el mismo que el número de elementos eliminados, el operador de asignación de T se llama el número de veces igual al número de elementos en el vector después de los elementos eliminados.
Ejemplo
#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'; // Elimina todos los números pares (C++11 y posterior) 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'; }
Salida:
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