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

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

Материал из cppreference.com
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
Поиск
Константы
Правила вывода (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)
Вспомогательные классы
 
<tbody> </tbody>
template< container-compatible-range<CharT> R > constexpr iterator insert_range( const_iterator pos, R&& rg );
(начиная с C++23)

Вставляет символы из диапазона rg перед элементом (если есть), на который указывает pos.

Эквивалентно

return insert(pos - begin(),
    std::basic_string(
        std::from_range,
        std::forward<R>(rg),
        get_allocator())
);

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

Параметры

pos итератор, перед которым будут вставлены символы
rg no section name

Возвращаемое значение

Итератор, который ссылается на первый вставленный символ или pos, если символы не были вставлены, поскольку rg был пустым.

Сложность

Линейная по размеру rg.

Исключения

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

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

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

Примечание

Макрос Тестирования функциональности Значение Стандарт Функциональность
__cpp_lib_containers_ranges 202202L (C++23) функции-элементы, которые принимают no section name

Пример

#include <cassert>
#include <iterator>
#include <string>

int main()
{
    const auto source = {'l', 'i', 'b', '_'};
    std::string target{"__cpp_containers_ranges"};
    //                        ^вставка произойдёт
    //                         перед этой позицией

    const auto pos = target.find("container");
    assert(pos != target.npos);
    auto iter = std::next(target.begin(), pos);

#ifdef __cpp_lib_containers_ranges
    target.insert_range(iter, source);
#else
    target.insert(iter, source.begin(), source.end());
#endif

    assert(target == "__cpp_lib_containers_ranges");
    //                      ^^^^
}

Смотрите также

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