Scroll to navigation

std::basic_string::replace(3) C++ Standard Libary std::basic_string::replace(3)

NAME

std::basic_string::replace - std::basic_string::replace

Synopsis


basic_string& replace( size_type pos,
size_type count, (1) (constexpr since
const basic_string& str C++20)
);
basic_string& replace( const_iterator first,
const_iterator last, (2) (constexpr since
const basic_string& str C++20)
);
basic_string& replace( size_type pos,
size_type count,


const basic_string& (until C++14)
str,


size_type pos2,
size_type count2 );
basic_string& replace( size_type pos,
size_type count,
(since C++14)
const basic_string& (constexpr since
str, C++20)


size_type pos2,
size_type count2 = npos );
basic_string& replace( size_type pos,
size_type count, (4) (constexpr since
const CharT* cstr, C++20)
size_type count2 );
basic_string& replace( const_iterator first,
const_iterator last, (5) (constexpr since
const CharT* cstr, C++20)
size_type count2 );
basic_string& replace( size_type pos, (constexpr since
size_type count, (6) C++20)
const CharT* cstr );
basic_string& replace( const_iterator first, (constexpr since
const_iterator last, (7) C++20)
const CharT* cstr );
basic_string& replace( size_type pos,
size_type count, (8) (constexpr since
size_type count2, CharT C++20)
ch );
basic_string& replace( const_iterator first,
const_iterator last, (3) (9) (constexpr since
size_type count2, CharT C++20)
ch );
template< class InputIt >


basic_string& replace( const_iterator first, (constexpr since
const_iterator last, (10) C++20)


InputIt first2, InputIt
last2 );
basic_string& replace( const_iterator first, (since C++11)
const_iterator last, (11) (constexpr since
C++20)
std::initializer_list<CharT> ilist );
template< class StringViewLike >


basic_string& replace( size_type pos, (since C++17)
size_type count, (12) (constexpr since
C++20)
const StringViewLike& t
);
template< class StringViewLike >


basic_string& replace( const_iterator first, (since C++17)
const_iterator last, (13) (constexpr since
C++20)
const StringViewLike& t
);
template< class StringViewLike >


basic_string& replace( size_type pos,
size_type count, (since C++17)
const StringViewLike& (14) (constexpr since
t, C++20)


size_type pos2,
size_type count2 = npos );


Replaces the characters in the range [begin() + pos, begin() + std::min(pos + count,
size())) or [first, last) with given characters.


1,2) Those characters are replaced with str.
3) Those characters are replaced with a substring [pos2, std::min(pos2 + count2,
str.size())) of str.
4,5) Those characters are replaced with the characters in the range [cstr, cstr +
count2).
If [cstr, cstr + count2) is not a valid range, the behavior is undefined.
6,7) Those characters are replaced with the characters in the range [cstr, cstr +
Traits::length(cstr)).
8,9) Those characters are replaced with count2 copies of ch.
10) Those characters are replaced with the characters in the range [first2, last2)
as if by replace(first, last, basic_string(first2, last2, get_allocator())).
11) Those characters are replaced with the characters in ilist.
12,13) Implicitly converts t to a string view sv as if by
std::basic_string_view<CharT, Traits> sv = t;, then those characters are replaced
with the characters from sv.
These overloads participate in overload resolution only if
std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>> is true and
std::is_convertible_v<const StringViewLike&, const CharT*> is false.
14) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT,
Traits> sv = t;, then those characters are replaced with the characters from the
subview sv.substr(pos2, count2).
This overload participates in overload resolution only if
std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>> is true and
std::is_convertible_v<const StringViewLike&, const CharT*> is false.


If [begin(), first) or [first, last) is not a valid range, the behavior is
undefined.

Parameters


pos - start of the substring that is going to be replaced
count - length of the substring that is going to be replaced
first, last - range of characters that is going to be replaced
str - string to use for replacement
pos2 - start of the substring to replace with
count2 - number of characters to replace with
cstr - pointer to the character string to use for replacement
ch - character value to use for replacement
first2, last2 - range of characters to use for replacement
ilist - initializer list with the characters to use for replacement
t - object (convertible to std::basic_string_view) with the characters
to use for replacement

Type requirements


-
InputIt must meet the requirements of LegacyInputIterator.

Return value


*this.

Exceptions


1) Throws std::out_of_range if pos > size().
3) Throws std::out_of_range if pos > size() or pos2 > str.size().
4,6,8) Throws std::out_of_range if pos > size().
12,14) Throws std::out_of_range if pos > size().


If the operation would result in size() > max_size(), throws std::length_error.


If an exception is thrown for any reason, these functions have no effect (strong
exception safety guarantee).

Example


This section is incomplete
Reason: no example


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
LWG 847 C++98 there was no exception safety added strong exception safety
guarantee guarantee
LWG 1323 C++98 the types of first and last changed to const_iterator
were iterator
LWG 2946 C++17 overloads (12,13) caused avoided by making them templates
ambiguity in some cases

See also


replace_with_range replaces specified portion of a string with a range of characters
(C++23) (public member function)
regex_replace replaces occurrences of a regular expression with formatted
(C++11) replacement text
(function template)
replace replaces all values satisfying specific criteria with another
replace_if value
(function template)

Category:


* Todo no example

2024.06.10 http://cppreference.com