Namespaces
Variants

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

From ja.cppreference.net
 
 
 
std::basic_string
 
basic_string& replace( size_type pos, size_type count,
                       const basic_string& str );
(1) (C++20からconstexpr)
basic_string& replace( const_iterator first, const_iterator last,
                       const basic_string& str );
(2) (C++20からconstexpr)
basic_string& replace( size_type pos, size_type count,
                       const basic_string& str,
                       size_type pos2, size_type count2 );
(3) (C++14まで)
basic_string& replace( size_type pos, size_type count,
                       const basic_string& str,
                       size_type pos2, size_type count2 = npos );
(C++14から)
(C++20からconstexpr)
basic_string& replace( size_type pos, size_type count,
                       const CharT* cstr, size_type count2 );
(4) (C++20からconstexpr)
basic_string& replace( const_iterator first, const_iterator last,
                       const CharT* cstr, size_type count2 );
(5) (C++20からconstexpr)
basic_string& replace( size_type pos, size_type count,
                       const CharT* cstr );
(6) (C++20からconstexpr)
basic_string& replace( const_iterator first, const_iterator last,
                       const CharT* cstr );
(7) (C++20からconstexpr)
basic_string& replace( size_type pos, size_type count,
                       size_type count2, CharT ch );
(8) (C++20からconstexpr)
basic_string& replace( const_iterator first, const_iterator last,
                       size_type count2, CharT ch );
(9) (C++20からconstexpr)
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
                       InputIt first2, InputIt last2 );
(10) (C++20からconstexpr)
basic_string& replace( const_iterator first, const_iterator last,
                       std::initializer_list<CharT> ilist );
(11) (C++11から)
(C++20からconstexpr)
template< class StringViewLike >
basic_string& replace( size_type pos, size_type count,
                       const StringViewLike& t );
(12) (C++17から)
(C++20からconstexpr)
template< class StringViewLike >
basic_string& replace( const_iterator first, const_iterator last,
                       const StringViewLike& t );
(13) (C++17から)
(C++20からconstexpr)
template< class StringViewLike >
basic_string& replace( size_type pos, size_type count,
                       const StringViewLike& t,
                       size_type pos2, size_type count2 = npos );
(14) (C++17から)
(C++20からconstexpr)

範囲 [begin() + pos, begin() + std::min(pos + count, size())) または [first, last) 内の文字を、指定された文字で置き換えます。

1,2) それらの文字は str で置き換えられます。
3) それらの文字は、[pos2, std::min(pos2 + count2, str.size())) の部分文字列 str で置き換えられます。
4,5) それらの文字は、範囲 [cstr, cstr + count2) 内の文字で置き換えられます。
[cstr, cstr + count2) が有効な範囲でない場合、動作は未定義です。
6,7) それらの文字は、範囲 [cstr, cstr + Traits::length(cstr)) 内の文字で置き換えられます。
8,9) それらの文字は、count2 個の ch のコピーで置き換えられます。
10) それらの文字は、範囲 [first2, last2) 内の文字で置き換えられます(replace(first, last, basic_string(first2, last2, get_allocator())) による場合と同様です)。
11) それらの文字は、ilist 内の文字で置き換えられます。
12,13) t を sv という文字列ビューに暗黙的に変換し(std::basic_string_view<CharT, Traits> sv = t; による場合と同様)、その後それらの文字は sv の文字で置き換えられます。
これらのオーバーロードは、std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
が true であり、std::is_convertible_v<const StringViewLike&, const CharT*> が false である場合にのみオーバーロード解決に参加します。
14) t を sv という文字列ビューに暗黙的に変換し(std::basic_string_view<CharT, Traits> sv = t; による場合と同様)、その後それらの文字はサブビュー sv.substr(pos2, count2) の文字で置き換えられます。
このオーバーロードは、std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
が true であり、std::is_convertible_v<const StringViewLike&, const CharT*> が false である場合にのみオーバーロード解決に参加します。

[begin(), first) または [first, last) が有効な範囲でない場合、動作は未定義です。

パラメータ

pos - 置換対象の部分文字列の開始位置
count - 置換対象の部分文字列の長さ
first, last - 置換対象の文字範囲
str - 置換に使用する文字列
pos2 - 置換元の部分文字列の開始位置
count2 - 置換に使用する文字数
cstr - 置換に使用する文字列へのポインタ
ch - 置換に使用する文字値
first2, last2 - 置換に使用する文字範囲
ilist - 置換に使用する文字の初期化子リスト
t - 置換に使用する文字列を持つオブジェクト( std::basic_string_view に変換可能)
型要件
-
InputIt は LegacyInputIterator の要件を満たさなければならない。

戻り値

* this .

例外

1) std::out_of_range がスローされる条件: pos > size ( ) の場合。
3) 例外を送出 std::out_of_range もし pos > size ( ) または pos2 > str. size ( ) の場合
4,6,8) std::out_of_range がスローされる条件: pos > size ( ) の場合。
12,14) Throws std::out_of_range if pos > size ( ) .

操作によって size() が max_size() を超える場合、 std::length_error をスローします。

何らかの理由で例外がスローされた場合、これらの関数は何も効果を持ちません( strong exception safety guarantee )。

例

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 847 C++98 例外安全性保証がなかった 強い例外安全性保証を追加
LWG 1323 C++98 first と last の型が iterator だった const_iterator に変更
LWG 2946 C++17 オーバーロード (12,13) が一部の場合に曖昧性を引き起こした テンプレート化することで回避

関連項目

指定された部分文字列を文字の範囲で置き換える
(パブリックメンバ関数)
正規表現にマッチする部分を書式化された置き換えテキストで置き換える
(関数テンプレート)
特定の条件を満たすすべての値を別の値で置き換える
(関数テンプレート & アルゴリズム関数オブジェクト)