Namespaces
Variants

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

From cppreference.net
template < class ... Args >
constexpr iterator emplace ( const_iterator position, Args && ... args ) ;
(C++26부터)

컨테이너에 새 요소를 pos 바로 앞에 직접 삽입합니다. 일반적으로 요소는 컨테이너가 제공한 위치에서 제자리(in-place) 생성되도록 new 배치(new placement)를 사용하여 생성됩니다. 인수 args... 는 생성자에게 std:: forward < Args > ( args ) ... 로 전달됩니다.

목차

매개변수

pos - 새 요소가 생성될 반복자 앞 위치
args - 요소의 생성자로 전달될 인자들
타입 요구사항
-
T 는 다음 요구사항을 충족해야 함: MoveAssignable , MoveInsertable EmplaceConstructible .

반환값

삽입된 요소에 대한 반복자.

복잡도

pos end() 사이의 거리에 선형적으로 비례합니다.

예외

std::bad_alloc 을 던집니다 - 호출 이전에 size ( ) == capacity ( ) 인 경우. 이 함수는 효과가 없습니다 ( 강력한 예외 안전성 보장 ).

삽입된 요소의 초기화 또는 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

참고 항목

요소 삽입
(public member function)
끝에 제자리에서 요소 생성
(public member function)