std::inplace_vector<T,N>:: insert_range
From cppreference.net
<
cpp
|
container
|
inplace vector
|
template
<
container-compatible-range
<
T
>
R
>
constexpr iterator insert_range ( const_iterator pos, R && rg ) ; |
(C++26 起) | |
以非逆序方式,在 pos 前插入 rg 中元素的副本。
| 本节内容尚不完整 |
范围内的每个迭代器 rg 都会被精确解引用一次。
如果 rg 与 * this 存在重叠,则行为未定义。
目录 |
参数
| pos | - |
内容将插入到该迭代器之前(
pos
可以是
end()
迭代器)
|
| rg | - |
一个
容器兼容范围
,即一个
input_range
,其元素可转换为
T
|
| 类型要求 | ||
-
|
||
返回值
指向插入到 * this 的第一个元素的迭代器,若 rg 为空则返回 pos 。
异常处理
- 若 ranges:: distance ( rg ) + size ( ) > capacity ( ) 则抛出 std::bad_alloc 。此时 * this 的元素不会被修改。
-
插入操作(即
T的复制/移动构造函数、移动/复制赋值运算符)或任何 LegacyInputIterator 操作所抛出的异常。此时 * this 在范围[ 0 ,pos)内的元素不会被修改。
示例
运行此代码
#include <cassert> #include <inplace_vector> #include <iterator> #include <new> #include <print> int main() { auto v = std::inplace_vector<int, 8>{0, 1, 2, 3}; auto pos = std::next(v.begin(), 2); assert(*pos == 2); const auto rg = {-1, -2, -3}; v.insert_range(pos, rg); std::println("{}", v); try { assert(v.size() + rg.size() > v.capacity()); v.insert_range(pos, rg); // 抛出异常:空间不足 } catch(const std::bad_alloc& ex) { std::println("{}", ex.what()); } }
可能的输出:
[0, 1, -1, -2, -3, 2, 3] std::bad_alloc
参见
|
插入元素
(公开成员函数) |
|
|
在末尾添加元素范围
(公开成员函数) |
|
|
尝试在末尾添加元素范围
(公开成员函数) |