Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
basic_string::insert
Поиск
Константы
Правила вывода(C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до 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)
Вспомогательные классы
 
(1)
basic_string& insert( size_type index, size_type count, CharT ch );
(до C++20)
constexpr basic_string& insert( size_type index, size_type count, CharT ch );
(начиная с C++20)
(2)
basic_string& insert( size_type index, const CharT* s );
(до C++20)
constexpr basic_string& insert( size_type index, const CharT* s );
(начиная с C++20)
(3)
basic_string& insert( size_type index, const CharT* s, size_type count );
(до C++20)
constexpr basic_string& insert( size_type index,
                                const CharT* s, size_type count );
(начиная с C++20)
(4)
basic_string& insert( size_type index, const basic_string& str );
(до C++20)
constexpr basic_string& insert( size_type index, const basic_string& str );
(начиная с C++20)
(5)
basic_string& insert( size_type index, const basic_string& str,
                      size_type s_index, size_type count );
(до C++14)
basic_string& insert( size_type index, const basic_string& str,
                      size_type s_index, size_type count = npos );
(начиная с C++14)
(до C++20)
constexpr basic_string& insert( size_type index, const basic_string& str,
                                size_type s_index, size_type count = npos );
(начиная с C++20)
(6)
iterator insert( iterator pos, CharT ch );
(до C++11)
iterator insert( const_iterator pos, CharT ch );
(начиная с C++11)
(до C++20)
constexpr iterator insert( const_iterator pos, CharT ch );
(начиная с C++20)
(7)
void insert( iterator pos, size_type count, CharT ch );
(до C++11)
iterator insert( const_iterator pos, size_type count, CharT ch );
(начиная с C++11)
(до C++20)
constexpr iterator insert( const_iterator pos, size_type count, CharT ch );
(начиная с C++20)
(8)
template<class InputIt >
void insert( iterator pos, InputIt first, InputIt last );
(до C++11)
template<class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
(начиная с C++11)
(до C++20)
template<class InputIt >
constexpr iterator insert( const_iterator pos, InputIt first, InputIt last );
(начиная с C++20)
(9)
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
(начиная с C++11)
(до C++20)
constexpr iterator insert( const_iterator pos,
                           std::initializer_list<CharT> ilist );
(начиная с C++20)
(10)
template<class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t );
(начиная с C++17)
(до C++20)
template<class StringViewLike >
constexpr basic_string& insert( size_type index, const StringViewLike& t );
(начиная с C++20)
(11)
template<class StringViewLike >

basic_string& insert( size_type index, const StringViewLike& t,

                      size_type t_index, size_type count = npos );
(начиная с C++17)
(до C++20)
template<class StringViewLike >

constexpr basic_string& insert( size_type index, const StringViewLike& t,

                                size_type t_index, size_type count = npos );
(начиная с C++20)

Вставляет символы в строку.

1) Вставляет count копий символа ch в позицию index.
2) Вставляет строку символов с завершающим нулём, на которую указывает s, в позицию index. Длина строки определяется по первому нулевому символу с помощью Traits::length(s).
3) Вставляет символы из диапазона [ss + count) в позицию index. Диапазон может содержать нулевые символы.
4) Вставляет строку str в позицию index.
5) Вставляет строку, полученную с помощью str.substr(s_index, count) в позицию index.
6) Вставляет символ ch перед символом, на который указывает pos.
7) Вставляет count копий символа ch перед элементом (если есть), на который указывает pos.
8) Вставляет символы из диапазона [firstlast) перед элементом (если есть), на который указывает pos, как если бы insert(pos - begin(), basic_string(first, last, get_allocator())).

Эта перегрузка не участвует в разрешении перегрузки, если InputIt не соответствует LegacyInputIterator.

(начиная с C++11)
9) Вставляет элементы из списка инициализаторов ilist перед элементом (если есть), на который указывает pos.
10) Неявно преобразует t в строковое представление sv, как если бы с помощью std::basic_string_view<CharT, Traits> sv = t;, затем вставляет элементы из sv перед элементом (если есть), на который указывает index, как если бы insert(index, sv.data(), sv.size()).
Эта перегрузка участвует в разрешении перегрузки, только если std::is_convertible_v<const StringViewLike&,
                      std::basic_string_view<CharT, Traits>>
равно true и std::is_convertible_v<const StringViewLike&, const CharT*> равно false.
11) Неявно преобразует t в строковое представление sv, как если бы с помощью std::basic_string_view<CharT, Traits> sv = t;, затем вставляет перед элементом (если есть), на который указывает index, символы из подпредставления [t_indext_index + count) из sv.
  • Если запрошенное подпредставление продолжается после конца sv или если count == npos, результирующее подпредставление будет [t_indexsv.size()).
  • Если t_index > sv.size() или index > size(), генерирует std::out_of_range.
Эта перегрузка участвует в разрешении перегрузки, только если std::is_convertible_v<const StringViewLike&,
                      std::basic_string_view<CharT, Traits>>
равно true и std::is_convertible_v<const StringViewLike&, const CharT*> равно false.

Если pos не является допустимым итератором для *this, поведение не определено.

Содержание

[править]Параметры

index позиция, в которую будет вставлено содержимое
pos итератор, перед которым будут вставлены символы
ch символ для вставки
count количество символов для вставки
s указатель на строку символов для вставки
str строка для вставки
first, last символы, определяющие диапазон для вставки
s_index позиция первого символа в str для вставки
ilist std::initializer_list из которого вставлять символы
t объект (конвертируемый в std::basic_string_view) из которого вставлять символы
t_index позиция первого символа в t для вставки
Требования к типам
-
InputIt должен соответствовать требованиям LegacyInputIterator.

[править]Возвращаемое значение

1-5)*this
6-9) Итератор, который ссылается на копию первого вставленного символа или pos, если символы не были вставлены (count ==0 или first == last или ilist.size()==0)
10,11)*this

[править]Исключения

1-4,10) Генерирует std::out_of_range, если index > size().
5) Генерирует std::out_of_range, если index > size() или если s_index > str.size().
11) Генерирует std::out_of_range, если index > size() или если t_index > sv.size().

Во всех случаях генерирует std::length_error, если size()+ ins_count > max_size(), где ins_count количество символов, которые будут вставлены.

Во всех случаях, если std::allocator_traits<Allocator>::allocate генерирует исключение, оно генерируется повторно.

(начиная с C++20)

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

[править]Пример

#include <cassert>#include <iterator>#include <string>   usingnamespace std::string_literals;   int main(){std::string s ="xmplr";   // insert(size_type index, size_type count, char ch) s.insert(0, 1, 'E');assert("Exmplr"== s);   // insert(size_type index, const char* s) s.insert(2, "e");assert("Exemplr"== s);   // insert(size_type index, string const& str) s.insert(6, "a"s);assert("Exemplar"== s);   // insert(size_type index, string const& str,// size_type s_index, size_type count) s.insert(8, " is an example string."s, 0, 14);assert("Exemplar is an example"== s);   // insert(const_iterator pos, char ch) s.insert(s.cbegin()+ s.find_first_of('n')+1, ':');assert("Exemplar is an: example"== s);   // insert(const_iterator pos, size_type count, char ch) s.insert(s.cbegin()+ s.find_first_of(':')+1, 2, '=');assert("Exemplar is an:== example"== s);   // insert(const_iterator pos, InputIt first, InputIt last){std::string seq =" string"; s.insert(s.begin()+ s.find_last_of('e')+1, std::begin(seq), std::end(seq));assert("Exemplar is an:== example string"== s);}   // insert(const_iterator pos, std::initializer_list<char>) s.insert(s.cbegin()+ s.find_first_of('g')+1, {'.'});assert("Exemplar is an:== example string."== s);}

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 7 C++98 перегрузка (8) ссылается на несуществующую перегрузку правильно ссылается на перегрузку (4)
LWG 847 C++98 не было гарантии безопасности исключений добавлена надёжная гарантия безопасности
исключений
LWG 2946 C++17 перегрузка (10) в некоторых случаях вызывала двусмысленность устранено, сделав её шаблоном

[править]Смотрите также

вставляет диапазон символов
(public функция-элемент)[править]
добавляет символы в конец
(public функция-элемент)[править]
добавляет символ в конец
(public функция-элемент)[править]
close