std::basic_string<CharT,Traits,Allocator>:: erase
From cppreference.net
<
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
处的字符。
如果
position
不是
*
this
上的
可解引用迭代器
,则行为未定义。
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); // 使用重载(1)擦除" An" std::cout << "2) " << s << '\n'; s.erase(std::find(s.begin(), s.end(), ' ')); // 擦除第一个空格;重载(2) std::cout << "3) " << s << '\n'; s.erase(s.find(' ')); // 从空格开始截断到字符串末尾;重载(1) std::cout << "4) " << s << '\n'; auto it = std::next(s.begin(), s.find('s')); // 获取指向第一个's'的迭代器 s.erase(it, std::next(it, 2)); // 擦除"sI";重载(3) std::cout << "5) " << s << '\n'; }
输出:
1) This Is An Example 2) This Is Example 3) ThisIs Example 4) ThisIs 5) This
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用版本 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 27 | C++98 |
重载版本
(
3
)
未擦除
last
指向的字符,但返回
指向该字符紧后字符的迭代器 |
返回指向
该字符的迭代器 |
| LWG 428 | C++98 |
重载版本
(
2
)
显式要求
position
必须有效,但
SequenceContainer 要求其必须可解引用(更严格) |
移除显式
要求 |
| LWG 847 | C++98 | 未提供异常安全保证 |
增加强异常
安全保证 |
参见
|
清空内容
(公开成员函数) |