std::basic_string<CharT,Traits,Allocator>:: insert_range
| Classes | ||||
|
(C++17)
|
||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
template
<
container-compatible-range
<
CharT
>
R
>
constexpr iterator insert_range ( const_iterator pos, R && rg ) ; |
(C++23 起) | |
在由 pos 指向的元素(如果存在)之前插入来自范围 rg 的字符。
等同于
return insert(pos - begin(), std::basic_string( std::from_range, std::forward<R>(rg), get_allocator()) );
如果 pos 不是 * this 上的有效迭代器,则行为未定义。
目录 |
参数
| pos | - | 将在该迭代器之前插入字符 |
| rg | - | 一个 容器兼容范围 |
返回值
一个指向首个插入字符的迭代器,若因 rg 为空而未插入任何字符时,则返回 pos 。
复杂度
线性于 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"}; // ^插入将在此位置之前发生 // 在此位置之前插入 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"); // ^^^^ }
参见
|
插入字符
(公开成员函数) |