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

来自cppreference.com
 
 
 
 
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 - 容器兼容范围,即其元素可以转换为 Tinput_range
类型要求
-
如果满足以下任意条件,那么行为未定义:

[编辑]返回值

返回指向插入到 *this 中的第一个元素的迭代器,或在 rg 为空时返回 pos

异常

  • ranges::distance(rg)+ size()> capacity() 时抛出。不会改动 *this 中的元素。
  • 由插入操作(即 T 的复制/移动构造函数或复制/移动赋值运算符),或者由任何老式输入迭代器(LegacyInputIterator) 的操作所抛出的任何异常。不会改动 *this 在范围 [0pos) 中的元素。

[编辑]示例

#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);constauto 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(conststd::bad_alloc& ex){std::println("{}", ex.what());}}

可能的输出:

[0, 1, -1, -2, -3, 2, 3] std::bad_alloc

[编辑]参阅

插入元素
(公开成员函数)
添加元素的范围到末尾
(公开成员函数)
尝试添加元素的范围到末尾
(公开成员函数)
close