Spec-Zone.ru › C++

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

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 - диапазон, совместимый с контейнером container compatible range

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

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

Сложность

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

Исключения

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

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

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

Примечания

Макрокоманда проверки наличия функции Значение Стандарт Функция
__cpp_lib_containers_ranges 202202L (C++23) члены функций, принимающие диапазон, совместимый с контейнером

Пример

#include <cassert>
#include <iterator>
#include <string>
 
int main()
{
    const auto source = {'l', 'i', 'b', '_'};
    std::string target{"__cpp_containers_ranges"};
    //                        ^insertion will occur
    //                         before this position
 
    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");
    //                      ^^^^
}

См. также

insert
вставляет символы
(публичный член-функция)

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

Spec-Zone.ru

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