std::basic_string<CharT,Traits,Allocator>::erase
来自 cppreference.com
< cpp | string | basic string
basic_string& erase( size_type index = 0, size_type count = npos ); |
(1) | (从 C++20 开始是 constexpr) |
(2) | ||
iterator erase( iterator position ); |
(直到 C++11) | |
iterator erase( const_iterator position ); |
(从 C++11 开始) (从 C++20 开始是 constexpr) |
|
(3) | ||
iterator erase( iterator first, iterator last ); |
(直到 C++11) | |
iterator erase( const_iterator first, const_iterator last ); |
(从 C++11 开始) (从 C++20 开始是 constexpr) |
|
从字符串中删除指定的字符。
2) 删除 position 处的字符。
3) 删除范围
[
first,
last)
中的字符。内容 |
[编辑] 参数
index | - | 要删除的第一个字符 |
count | - | 要删除的字符数 |
position | - | 指向要删除的字符的迭代器 |
first, last | - | 要删除的字符范围 |
[编辑] 返回值
1) *this
2) 指向被删除字符后面的字符的迭代器,如果不存在这样的字符,则为 end()。
[编辑] 异常
2,3) 不抛出任何内容。
如果由于任何原因抛出异常,则此函数不产生任何影响 (强异常安全性保证)。
[编辑] 示例
运行此代码
#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'; }
输出
1) This Is An Example 2) This Is Example 3) ThisIs Example 4) ThisIs 5) This
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯地应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 27 | C++98 | 重载 (3) 没有擦除 last 指向的字符,但它返回了 指向紧随其后的字符的迭代器 |
返回一个迭代器 指向该字符 |
LWG 428 | C++98 | 重载 (2) 明确要求 position 有效,但是 SequenceContainer 要求它是可解引用的(更严格) |
删除了 明确要求 |
LWG 847 | C++98 | 没有异常安全性保证 | 添加了强异常 安全性保证 |
[编辑] 另请参阅
清除内容 (公有成员函数) |