std::inplace_vector<T,N>::emplace
來自 cppreference.com
< cpp | 容器 | inplace_vector
template< class... Args > constexpr iterator emplace( const_iterator position, Args&&... args ); |
(C++26 起) | |
在 pos 之前直接將一個新元素插入容器。通常,元素使用 placement new 在容器提供的位置原地構造元素。args... 引數被轉發給建構函式,作為 std::forward<Args>(args)...。
本節不完整 |
目錄 |
[編輯] 引數
pos | - | 新元素將被構造在其之前的迭代器 |
args | - | 轉發給元素建構函式的引數 |
型別要求 | ||
-T 必須滿足 可移動賦值 (MoveAssignable)、可移動插入 (MoveInsertable) 和 可就位構造 (EmplaceConstructible) 的要求。 |
[編輯] 返回值
指向已插入元素的迭代器。
[編輯] 複雜度
與 pos 和 end() 之間的距離呈線性關係。
[編輯] 異常
如果在呼叫前 size() == capacity(),則丟擲 std::bad_alloc。該函式無副作用(強異常安全保證)。
由插入元素的初始化或任何 舊式輸入迭代器 (LegacyInputIterator) 操作丟擲的任何異常。位於 [
0,
pos)
的元素未被修改。
[編輯] 示例
執行此程式碼
#include <cassert> #include <inplace_vector> #include <new> #include <utility> int main() { using P = std::pair<int, int>; using I = std::inplace_vector<P, 3>; auto nums = I{{0, 1}, {2, 3}}; auto it = nums.emplace(nums.begin() + 1, -1, -2); assert((*it == P{-1, -2})); assert((nums == I{P{0, 1}, {-1, -2}, {2, 3}})); try { nums.emplace(nums.begin(), 1, 3); // throws: no space } catch(const std::bad_alloc& ex) { std::cout << ex.what() << '\n'; } }
可能的輸出
std::bad_alloc
[編輯] 參閱
插入元素 (公共成員函式) | |
就地構造元素於結尾 (公共成員函式) |