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)
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)
(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().

Если операция приведёт к превышению max_size() значением 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
заменяет все значения, удовлетворяющие определённым критериям, другим значением
(шаблон функции и объект-функция алгоритма)
ranges::replaceranges::replace_if
(C++20)(C++20)

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

Spec-Zone.ru

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