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

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 для вставки
iliststd::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>
 
using namespace 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 7C++98перегрузка (8) ссылается на несуществующую перегрузкуправильно ссылается на перегрузку (4)
LWG 847C++98не было гарантии безопасности исключенийдобавлена надёжная гарантия безопасности
исключений
LWG 2946C++17перегрузка (10) в некоторых случаях вызывала двусмысленностьустранено, сделав её шаблоном

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

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