public member function
<string>

std::basic_string::erase

sequence (1)
basic_string& erase (size_type pos = 0, size_type len = npos);
character (2)
     iterator erase (iterator p);
range (3)
     iterator erase (iterator first, iterator last);
sequence (1)
basic_string& erase (size_type pos = 0, size_type len = npos);
character (2)
     iterator erase (const_iterator p);
range (3)
     iterator erase (const_iterator first, const_iterator last);
从字符串中删除字符
删除 basic_string 的一部分,从而减少其 长度

(1) 序列
删除字符串值中从字符位置 pos 开始并跨越 len 个字符的部分(或者直到字符串的末尾,如果内容太短或者 lenbasic_string::npos)。
请注意,默认参数会删除字符串中的所有字符(如成员函数 clear)。
(2) 字符
删除 p 指向的字符。
(3) 范围
删除范围内的字符序列[first,last).

参数

pos
要删除的第一个字符的位置。
如果它大于字符串长度,则抛出out_of_range
注意:str中的第一个字符用值表示0(不是1).
len
要删除的字符数(如果字符串较短,则尽可能多地删除字符)。
basic_string::npos值表示直到字符串末尾的所有字符。
p
指向要删除的字符的迭代器。
first, last
指定要删除的 basic_string 中的范围的迭代器[first,last)。即,该范围包括 firstlast 之间的所有字符,包括 first 指向的字符,但不包括 last 指向的字符。

成员类型size_type是一种无符号整型类型。
成员类型iteratorconst_iterator是指向 basic_string 的字符的 随机访问迭代器 类型。

返回值

序列版本 (1) 返回*this.
其他版本返回一个迭代器,该迭代器引用现在占据第一个删除的字符的位置的字符,如果不存在这样的字符,则返回 basic_string::end

成员类型iterator是指向 basic_string 的字符的 随机访问迭代器 类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// string::erase
#include <iostream>
#include <string>

int main ()
{
  std::string str ("This is an example sentence.");
  std::cout << str << '\n';
                                           // "This is an example sentence."
  str.erase (10,8);                        //            ^^^^^^^^
  std::cout << str << '\n';
                                           // "This is an sentence."
  str.erase (str.begin()+9);               //           ^
  std::cout << str << '\n';
                                           // "This is a sentence."
  str.erase (str.begin()+5, str.end()-9);  //       ^^^^^
  std::cout << str << '\n';
                                           // "This sentence."
  return 0;
}
输出
This is an example sentence.
This is an sentence.
This is a sentence.
This sentence.


复杂度

未指定,但通常与新的 字符串长度 成线性关系。

迭代器有效性

与此对象相关的任何迭代器、指针和引用都可能失效。

数据竞争

对象被修改。

异常安全

强保证: 如果抛出异常,则 basic_string 中没有任何更改。

如果 pos 大于 字符串长度,则会抛出 out_of_range 异常。

(2) 中的无效 p(3) 中的无效范围会导致未定义的行为
对于 (1)(3),如果抛出异常,则 basic_string 中没有变化(强保证)。
对于(2),它永远不会抛出异常(无抛出保证)。

如果 pos 大于 字符串长度,则会抛出 out_of_range 异常。

(3) 中的无效范围会导致未定义的行为

另见