命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
修改器
basic_string::replace
搜索
操作
常量
非成员函数
I/O
比较
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
文字
辅助类
推导指南 (C++17)

 
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)
(3)
basic_string& replace( size_type pos, size_type count,

                       const basic_string& str,

                       size_type pos2, size_type count2 );
(直到 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() + posbegin() + std::min(pos + count, size()))[firstlast) 中的字符。

1,2) 这些字符将被 str 替换。
3) 这些字符将被 str 的子字符串 [pos2std::min(pos2 + count2, str.size())) 替换。
4,5) 这些字符将被范围 [cstrcstr + count2) 中的字符替换。
如果 [cstrcstr + count2) 不是一个 有效范围,则行为未定义。
6,7) 这些字符将被范围 [cstrcstr + Traits::length(cstr)) 中的字符替换。
8,9) 这些字符将被 count2ch 的副本替换。
10) 这些字符将被范围 [first2last2) 中的字符替换,就好像通过 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>>
truestd::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>>
truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载解析。

如果 [begin()first)[firstlast) 不是一个有效的范围,则行为未定义。

内容

[编辑] 参数

pos - 要替换的子字符串的起始位置
count - 要替换的子字符串的长度
first, last - 要替换的字符范围
str - 用于替换的字符串
pos2 - 要替换的子字符串的起始位置
count2 - 要替换的字符数量
cstr - 指向用于替换的字符字符串的指针
ch - 用于替换的字符值
first2, last2 - 用于替换的字符范围
ilist - 用于替换的字符的初始化列表
t - 对象(可转换为 std::basic_string_view)用于替换的字符
类型要求
-
InputIt 必须满足 LegacyInputIterator 的要求。

[编辑] 返回值

*this.

[编辑] 异常

1) 如果 pos > size(),则抛出 std::out_of_range
3) 如果 pos > size()pos2 > str.size(),则抛出 std::out_of_range
4,6,8) 如果 pos > size(),则抛出 std::out_of_range
12,14) 如果 pos > size(),则抛出 std::out_of_range

如果操作会导致 size() > max_size(),则抛出 std::length_error

如果由于任何原因抛出异常,这些函数将不会有任何影响 (强异常安全性保证)。

[编辑] 示例

[编辑] 缺陷报告

以下行为更改缺陷报告已追溯应用于之前发布的 C++ 标准。

DR 应用于 发布的行为 正确行为
LWG 847 C++98 没有异常安全性保证 添加了强异常安全性保证
LWG 1323 C++98 firstlast 的类型为 iterator 更改为 const_iterator
LWG 2946 C++17 重载 (12,13) 在某些情况下会导致歧义 通过将其设为模板来避免

[编辑] 参见

用字符范围替换字符串的指定部分
(公共成员函数) [编辑]
用格式化的替换文本替换正则表达式出现的匹配项
(函数模板) [编辑]
将满足特定条件的所有值替换为另一个值
(函数模板) [编辑]