basic_string&
erase(size_type pos = 0, size_type n = npos); // (1) C++03
constexpr basic_string&
erase(size_type pos = 0, size_type n = npos); // (1) C++20
iterator erase(iterator p); // (2) C++03
iterator erase(const_iterator p); // (2) C++11
constexpr iterator erase(const_iterator p); // (2) C++20
iterator
erase(iterator first,
iterator last); // (3) C++03
iterator
erase(const_iterator first,
const_iterator last); // (3) C++11
constexpr iterator
erase(const_iterator first,
const_iterator last); // (3) C++20
概要
要素を削除する。
- (1) :
pos
番目からn
要素を削除する。 - (2) : イテレータ
p
が指す要素を削除する - (3) : イテレータ範囲
[first, last)
を削除する
要件
- (1) :
pos <= size()
- (3) :
first
とlast
が*this
に対する有効なイテレータであり、[first, last)
が有効な範囲であること。
効果
- (1) :
n
とsize() - pos
のうち小さい方をxlen
とし、pos
番目からxlen
個の要素を削除する。 - (2) : イテレータ
p
が指す要素を削除する。 - (3) : イテレータ範囲
[first, last)
の文字列を削除する。
戻り値
- (1) :
*this
- (2) : 削除した要素の次を指すイテレータを返す。そのような要素がなければ
end()
を返す。 - (3) : 最後に削除した要素の次を指すイテレータを返す。そのような要素がなければ
end()
を返す。
例外
- (1) :
pos > size()
の場合、out_of_range
例外を送出する。 - (2) : 投げない (C++14から)
- (3) : 投げない (C++14から)
例
#include <iostream>
#include <string>
int main()
{
// (1) 指定した位置からN個の要素を削除する
{
std::string s = "12345";
// 1番目から2個の要素を削除
s.erase(1, 2);
std::cout << "(1) : " << s << std::endl;
}
// (2) 指定したイテレータが指す要素を削除する
{
std::string s = "12345";
decltype(s)::iterator it = s.begin() + 2; // '3'を指す
s.erase(it);
std::cout << "(2) : " << s << std::endl;
}
// (3) 指定したイテレータ範囲を削除する
{
std::string s = "12345";
decltype(s)::iterator it = s.begin() + 2; // '3'を指す
s.erase(it, s.end());
std::cout << "(3) : " << s << std::endl;
}
}
出力
(1) : 145
(2) : 1245
(3) : 12
参照
- LWG Issue 180. Container member iterator arguments constness has unintended consequences
- LWG Issue 2003. String exception inconsistency in erase.
- C++14から(2)と(3)に、「例外を投げない」という保証が追加された経緯のレポート
- P0980R1 Making
std::string
constexpr