Spec-Zone.ru › C++

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

basic_string& replace( size_type pos, size_type count,
                       const basic_string& str );
(1) (constexpr с C++20)
basic_string& replace( const_iterator first, const_iterator last,
                       const basic_string& str );
(2) (constexpr с C++20)
(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)
(constexpr с C++20)
basic_string& replace( size_type pos, size_type count,
                       const CharT* cstr, size_type count2 );
(4) (constexpr с C++20)
basic_string& replace( const_iterator first, const_iterator last,
                       const CharT* cstr, size_type count2 );
(5) (constexpr с C++20)
basic_string& replace( size_type pos, size_type count,
                       const CharT* cstr );
(6) (constexpr с C++20)
basic_string& replace( const_iterator first, const_iterator last,
                       const CharT* cstr );
(7) (constexpr с C++20)
basic_string& replace( size_type pos, size_type count,
                       size_type count2, CharT ch );
(8) (constexpr с C++20)
basic_string& replace( const_iterator first, const_iterator last,
                       size_type count2, CharT ch );
(9) (constexpr с C++20)
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
                       InputIt first2, InputIt last2 );
(10) (constexpr с C++20)
basic_string& replace( const_iterator first, const_iterator last,
                       std::initializer_list<CharT> ilist );
(11) (с C++11)
(constexpr с C++20)
template< class StringViewLike >
basic_string& replace( size_type pos, size_type count,
                       const StringViewLike& t );
(12) (с C++17)
(constexpr с C++20)
template< class StringViewLike >
basic_string& replace( const_iterator first, const_iterator last,
                       const StringViewLike& t );
(13) (с C++17)
(constexpr с C++20)
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)
(constexpr с C++20)

Заменяет символы в диапазоне [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) Бросает std::out_of_range если pos > size().

Если операция приведет к size() > max_size(), бросает std::length_error.

Если брошено исключение по какой-либо причине, эти функции не имеют эффекта (гарантия сильной устойчивости к исключениям).

Пример

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Поведение при публикации Корректное поведение
LWG 847 C++98 не было гарантии устойчивости к исключениям добавлена гарантия сильной устойчивости к исключениям
LWG 1323 C++98 типы first и last были iterator изменено на const_iterator
LWG 2946 C++17 перегрузки (12,13) в некоторых случаях вызывали неоднозначность избегается путём их шаблонизации

См. также

replace_with_range
(C++23)
заменяет указанную часть строки диапазоном символов
(публичный член-функция)
regex_replace
(C++11)
заменяет вхождения регулярного выражения отформатированным текстом замены
(шаблонная функция)
replacereplace_if
заменяет все значения, удовлетворяющие определенным критериям, другим значением
(шаблонная функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/replace

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API