Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: erase

From cppreference.net
std::basic_string
basic_string & erase ( size_type index = 0 , size_type count = npos ) ;
(1) (constexpr since C++20)
(2)
iterator erase ( iterator position ) ;
(until C++11)
iterator erase ( const_iterator position ) ;
(since C++11)
(constexpr since C++20)
(3)
iterator erase ( iterator first, iterator last ) ;
(until C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(since C++11)
(constexpr since C++20)

文字列から指定された文字を削除します。

1) std:: min ( count, size ( ) - index ) 個の文字を index から削除します。
2) position の文字を削除します。
positionが position dereferenceable iterator でない場合、動作は未定義です。
3) [ first , last ) の範囲の文字を削除します。
first または last * this 上の 有効なイテレータ でない場合、または [ first , last ) 有効な範囲 でない場合、動作は未定義です。

目次

パラメータ

index - 削除する最初の文字
count - 削除する文字数
position - 削除する文字へのイテレータ
first, last - 削除する文字の範囲

戻り値

1) * this
2) 消去された文字の直後の文字を指すイテレータ、またはそのような文字が存在しない場合は end() を返す。
3) 消去前に指していた文字を指すイテレータ、またはそのような文字が存在しない場合は end() を返す。

例外

1) std::out_of_range index size() より大きい場合。
2,3) 例外を送出しない。

何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( 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); // " An"を削除(オーバーロード(1)を使用)
    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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 27 C++98 オーバーロード ( 3 ) last が指す文字を消去しなかったが、
その文字の直後の文字を指すイテレータを返した
その文字を指すイテレータを
返す
LWG 428 C++98 オーバーロード ( 2 ) は明示的に position が有効であることを要求したが、
SequenceContainer は間接参照可能であることを要求する(より厳しい)
明示的な要求を
削除
LWG 847 C++98 例外安全性の保証がなかった 強い例外安全性の
保証を追加

関連項目

内容をクリアする
(公開メンバ関数)