std::inplace_vector<T,N>:: append_range
|
template
<
container-compatible-range
<
T
>
R
>
constexpr void append_range ( R && rg ) ; |
(C++26 起) | |
在
end()
之前按非逆序插入范围
rg
中元素的副本。
范围 rg 中的每个迭代器都会被精确解引用一次。
目录 |
参数
| rg | - |
一个
容器兼容范围
,即其元素可转换为
T
的
input_range
|
| 类型要求 | ||
-
T
无法从
*
ranges::
begin
(
rg
)
进行
原位构造
至
inplace_vector
,则行为未定义。
|
||
复杂度
与
rg
的大小呈线性关系。对
T
构造函数的调用次数恰好等于
std
::
ranges::
size
(
rg
)
)
。
异常
若
std
::
ranges::
size
(
rg
)
>
N
则抛出
std::bad_alloc
。
若因
T
的复制构造函数、移动构造函数、赋值运算符或移动赋值运算符,或任何
InputIterator
操作之外的异常被抛出,则无任何效果。
否则,若抛出异常,则
size
(
)
>=
n
且范围
[
0
,
n
)
内的元素保持不变,
其中
n
为此调用前
size()
的值。
示例
#include <cassert> #include <inplace_vector> #include <iostream> int main() { using I = std::inplace_vector<int, 8>; auto head = I{1, 2, 3, 4}; const auto tail = {-5, -6, -7}; head.append_range(tail); assert(head.size() == 7 and (head == I{1, 2, 3, 4, -5, -6, -7})); try { head.append_range(tail); // 抛出异常:空间不足 } catch(const std::bad_alloc&) { std::cout << "std::bad_alloc\n"; } }
输出:
std::bad_alloc
参见
|
尝试在末尾添加一个元素范围
(公开成员函数) |
|
|
插入一个元素范围
(公开成员函数) |
|
|
在末尾添加一个元素
(公开成员函数) |
|
|
在末尾原位构造一个元素
(公开成员函数) |