std::inplace_vector<T,N>::insert_range
来自cppreference.com
< 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 | - | 容器兼容范围,即其元素可以转换为 T 的 input_range |
类型要求 | ||
-如果满足以下任意条件,那么行为未定义:
|
[编辑]返回值
返回指向插入到 *this 中的第一个元素的迭代器,或在 rg 为空时返回 pos。
异常
- 当 ranges::distance(rg)+ size()> capacity() 时抛出。不会改动 *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);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
[编辑]参阅
插入元素 (公开成员函数) | |
添加元素的范围到末尾 (公开成员函数) | |
尝试添加元素的范围到末尾 (公开成员函数) |