std::inplace_vector<T,N>::try_append_range
来自 zh.cppreference.net
template< container-compatible-range<T> R >
constexpr std::ranges::borrowed_iterator_t<R> try_append_range( R&& rg );
|
(自 C++26 起) (自 C++26 起移除) |
|
将 rg 中的初始元素的副本追加到 end() 之前,直到所有元素都被插入或内部存储耗尽(即 size() == capacity() 为 true)。
所有迭代器和引用保持有效。end() 迭代器被非法化。
rg 中的每个迭代器最多被解引用一次。
参数
| rg | - |
一个
容器兼容范围
,即元素可转换为
T
的
input_range
|
| 类型要求 | ||
-
T
必须能从
*
ranges::
begin
(
rg
)
进行
EmplaceConstructible
到
inplace_vector
。否则行为未定义。
|
||
返回值
指向 rg 中首个未被插入到 * this 的元素的迭代器,若不存在这样的元素则返回 ranges:: end ( rg ) 。
复杂度
与插入元素数量呈线性关系。
异常
由插入元素的初始化抛出的任何异常。
inplace_vector
提供
基本异常安全保证
,即调用前容器的所有元素均被保留,且所有已插入元素(在异常发生前,如有)亦被保留。
备注
| 本节不完整 原因:解释此API的目的。 |
| 功能测试宏 | 值 | 标准 | 功能 |
|---|---|---|---|
__cpp_lib_inplace_vector |
202603L |
(C++26) | 已移除 try_append_range
|
示例
运行此代码
#include <cassert>
#include <initializer_list>
#include <inplace_vector>
int main()
{
#if defined(__cpp_lib_inplace_vector) and (__cpp_lib_inplace_vector < 202603L)
using I = std::inplace_vector<int, 8>;
auto nums = I{1, 2, 3};
const auto rg = {-1, -2, -3};
auto it = nums.try_append_range(rg);
assert(nums.size() == 6);
assert((nums == I{1, 2, 3, -1, -2, -3}));
assert(it == rg.end());
it = nums.try_append_range(rg);
assert(nums.size() == 8);
assert((nums == I{1, 2, 3, -1, -2, -3, -1, -2}));
assert(it == rg.begin() + 2);
#endif
}
参见
|
向末尾添加元素范围
(公开成员函数) |
|
|
向末尾添加元素
(公开成员函数) |
|
|
尝试向末尾添加元素
(公开成员函数) |
|
|
无条件向末尾添加元素
(公开成员函数) |
|
|
在末尾原位构造元素
(公开成员函数) |
|
|
尝试在末尾原位构造元素
(公开成员函数) |
|
|
无条件在末尾原位构造元素
(公开成员函数) |
|
|
移除末尾元素
(公开成员函数) |
|
|
创建从参数推断类型的
std::back_insert_iterator
(函数模板) |