std::inplace_vector<T,N>::try_append_range

来自cppreference.com
 
 
 
 
template< container-compatible-range<T> R >
constexpr std::ranges::borrowed_iterator_t<R> try_append_range( R&& rg );
(C++26 起)

rg 的前面部分的元素的副本插入 end() 之前,直到插入所有元素或者内部存储耗尽(即 size() == capacity()true)。

所有迭代器和引用保持有效。end() 迭代器失效。

rg 中的每个迭代器最多解引用一次。

参数

rg - 容器兼容范围,即元素可转换为 Tinput_range
类型要求
-
T 必须为从 *ranges::begin(rg) 可就位构造 (EmplaceConstructible) inplace_vector,否则,其行为未定义。

返回值

指向 rg 中未插入 *this 的第一个元素的迭代器,或若不存在这种元素则返回 ranges::end(rg)

复杂度

与所插入元素数成线性。

异常

所插入元素的初始化抛出的任何异常。

inplace_vector 提供基本异常安全性保证,就是说,保留此次调用前的所有容器元素,而且也保留(发生异常前)所有已经插入的元素(如果有)。

注解

示例

#include <cassert>
#include <initializer_list>
#include <inplace_vector>
 
int main()
{
    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);
}

参阅

添加元素的范围到末尾
(公开成员函数)
将元素添加到容器末尾
(公开成员函数)
尝试将元素添加到容器末尾
(公开成员函数)
无条件将元素添加到容器末尾
(公开成员函数)
在容器末尾原位构造元素
(公开成员函数)
try_append_range
尝试在容器末尾原位构造元素
(公开成员函数)
无条件在容器末尾原位构造元素
(公开成员函数)
移除末元素
(公开成员函数)
创建拥有从实参推出的类型的 std::back_insert_iterator
(函数模板)