std::inplace_vector<T,N>::insert_range
來自 cppreference.com
< cpp | 容器 | inplace_vector
template< container-compatible-range<T> R > constexpr iterator insert_range( const_iterator pos, R&& rg ); |
(C++26 起) | |
在 pos 之前,以非反轉順序插入 rg 中元素的副本。
本節不完整 |
範圍 rg 中的每個迭代器被解引用一次。
rg 不得與容器重疊。否則,行為是未定義的。
目錄 |
[編輯] 引數
pos | - | 將在其內容插入之前迭代器位置(pos 可以是 end() 迭代器) |
rg | - | 一個容器兼容範圍,即一個其元素可轉換為T 的input_range |
型別要求 | ||
-T 必須能夠從 *ranges::begin(rg) 就地構造(EmplaceConstructible)到 inplace_vector 中。否則,行為是未定義的。 |
[編輯] 返回值
一個指向插入到 inplace_vector
中第一個元素副本的 iterator
,如果 rg 為空,則指向 pos。
異常
- std::bad_alloc,如果 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); const auto 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); // throws: no space } catch(const std::bad_alloc& ex) { std::println("{}", ex.what()); } }
可能的輸出
[0, 1, -1, -2, -3, 2, 3] std::bad_alloc
[編輯] 另請參閱
插入元素 (公開成員函式) | |
新增一個元素範圍到結尾 (公開成員函式) | |
嘗試在末尾新增一系列元素 (公開成員函式) |