(1) | ||
basic_string& erase( size_type index = 0, size_type count = npos ); | (until C++20) | |
constexpr basic_string& erase( size_type index = 0, size_type count = npos ); | (since C++20) | |
(2) | ||
iterator erase( iterator position ); | (until C++11) | |
iterator erase( const_iterator position ); | (since C++11) (until C++20) | |
constexpr iterator erase( const_iterator position ); | (since C++20) | |
(3) | ||
iterator erase( iterator first, iterator last ); | (until C++11) | |
iterator erase( const_iterator first, const_iterator last ); | (since C++11) (until C++20) | |
constexpr iterator erase( const_iterator first, const_iterator last ); | (since C++20) |
Removes specified characters from the string.
position
.[
first
,
last
)
.first
or last
is not a valid iterator on *this
, or [
first
,
last
)
is not a valid range, the behavior is undefined.index | - | first character to remove |
count | - | number of characters to remove |
position | - | iterator to the character to remove |
first, last | - | range of the characters to remove |
*this
end()
if no such character exists.last
pointed to before the erase, or end()
if no such character exists.If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
#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); // erases " An" using overload (1) std::cout << "2) " << s << '\n'; s.erase(std::find(s.begin(), s.end(), ' ')); // erases first ' '; overload (2) std::cout << "3) " << s << '\n'; s.erase(s.find(' ')); // trims from ' ' to the end of the string; overload (1) std::cout << "4) " << s << '\n'; auto it = std::next(s.begin(), s.find('s')); // obtains iterator to the first 's' s.erase(it, std::next(it, 2)); // erases "sI"; overload (3) std::cout << "5) " << s << '\n'; }
Output:
1) This Is An Example 2) This Is Example 3) ThisIs Example 4) ThisIs 5) This
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 27 | C++98 | overload (3) did not erase the character last pointed to, but it returnedthe iterator pointing to the character immediately following that character | returns an iterator pointing to that character |
LWG 428 | C++98 | overload (2) explicitly required position to be valid, butSequenceContainer requires it to be dereferenceable (stricter) | removed the explicit requirement |
LWG 847 | C++98 | there was no exception safety guarantee | added strong exception safety guarantee |
clears the contents (public member function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/erase