std::basic_string<CharT,Traits,Allocator>::erase
De es.cppreference.net
basic_string& erase( size_type index = 0, size_type count = npos );
|
(1) | (constexpr desde C++20) |
iterator erase( iterator position );
|
(2) | (hasta C++11) |
iterator erase( const_iterator position );
|
(desde C++11) (constexpr desde C++20) |
|
iterator erase( iterator first, iterator last );
|
(3) | (hasta C++11) |
iterator erase( const_iterator first, const_iterator last );
|
(desde C++11) (constexpr desde C++20) |
|
Elimina los caracteres especificados de la cadena.
1) Elimina
std::min(count, size() - index) caracteres empezando en index.2) Elimina el carácter en
position.3) Elimina los caracteres en el rango
[first, last). Si
first o last no es un iterador válido en *this, o [first, last) no es un rango válido, el comportamiento no está definido.Parámetros
| index | - | primer carácter a eliminar |
| count | - | número de caracteres a eliminar |
| position | - | iterador al carácter a eliminar |
| first, last | - | rango de los caracteres a eliminar |
Valor de retorno
1)
*
this
2)
Iterador que apunta al carácter inmediatamente siguiente al carácter borrado, o
end()
si no existe tal carácter.
3)
Iterador que apunta al carácter
last
al que apuntaba antes del borrado, o
end()
si no existe dicho carácter.
Excepciones
2,3)
No lanza nada.
Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).
Ejemplo
Ejecutar este código
#include <algorithm> #include <iostream> #include <iterator> #include <string> int main() { std::string s = "This Is An Example"; std::cout << "1) " << s << '\n'; s.erase(7, 3); // borra " An" usando la sobrecarga (1) std::cout << "2) " << s << '\n'; s.erase(std::find(s.begin(), s.end(), ' ')); // borra el primer ' '; sobrecarga (2) std::cout << "3) " << s << '\n'; s.erase(s.find(' ')); // recorta desde ' ' hasta el final del string; sobrecarga (1) std::cout << "4) " << s << '\n'; auto it = std::next(s.begin(), s.find('s')); // obtiene un iterador al primer 's' s.erase(it, std::next(it, 2)); // borra "sI"; sobrecarga (3) std::cout << "5) " << s << '\n'; }
Salida:
1) This Is An Example 2) This Is Example 3) ThisIs Example 4) ThisIs 5) This
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 27 | C++98 |
la sobrecarga
(
3
)
no borraba el carácter
last
apuntado, pero devolvía
el iterador apuntando al carácter inmediatamente siguiente a ese carácter |
devuelve un iterador
apuntando a ese carácter |
| LWG 428 | C++98 |
la sobrecarga
(
2
)
requería explícitamente que
position
fuera válida, pero
SequenceContainer requiere que sea desreferenciable (más estricto) |
eliminó el
requisito explícito |
| LWG 847 | C++98 | no había garantía de seguridad de excepciones |
añadió garantía de seguridad
fuerte de excepciones |
Véase también
|
borra el contenido
(función miembro pública) |