deque::emplace

deque::emplace (위치에 제자리 생성 삽입)

지정한 위치 바로 앞에 새 요소를 제자리(in-place) 생성해 삽입하는 멤버 함수예요. 추가 복사/이동을 피할 수 있어요. <deque> 헤더, C++11부터.

출처: cppreference

본문

emplacepos 바로 앞에 새 요소를 삽입해요.

template< class... Args >
iterator emplace( const_iterator pos, Args&&... args );

요소는 std::allocator_traits::construct를 통해 생성되는데, 전형적으로 placement new로 컨테이너가 제공하는 위치에 제자리 생성돼요. 다만 필요한 위치가 기존 요소로 차 있다면, 삽입할 요소를 먼저 다른 위치에 만들고 그다음 필수 위치로 이동 대입해요.

인자 args...std::forward<Args>(args)...로 생성자에 전달돼요.

std::deque<std::pair<int,int>> d;
d.emplace(d.begin(), 1, 2);   // {1,2}를 제자리 생성해 앞에 삽입
  • 반환 값: 삽입된 요소를 가리키는 반복자.
  • 중간 삽입은 선형 시간이고, 양끝이면 상수 시간에 가까워요.

insert가 이미 만들어진 객체를 복사/이동하는 반면, emplace는 생성자 인자를 직접 받아 제자리에서 만들어 불필요한 임시 객체를 줄여줘요.

더 알아보기 (Learn more)

cppreference