deque::emplace_back
deque::emplace_back (뒤에 제자리 생성 추가)
컨테이너 끝에 새 요소를 제자리 생성해 추가하는 멤버 함수예요. <deque> 헤더, C++11부터.
출처: cppreference
본문
emplace_back은 컨테이너의 끝에 새 요소를 추가해요.
template< class... Args >
void emplace_back( Args&&... args ); // (until C++17)
template< class... Args >
reference emplace_back( Args&&... args ); // (since C++17)
C++17부터는 새로 추가된 요소에 대한 참조를 반환해요. 요소는 std::allocator_traits::construct를 통해, 전형적으로 placement new로 컨테이너가 제공하는 위치에 제자리 생성돼요. 인자 args...는 std::forward<Args>(args)...로 생성자에 전달돼요.
- 모든 반복자(끝 반복자 포함)가 무효화되지만, 참조는 무효화되지 않아요.
- 복잡도: 상수 시간.
std::deque<std::pair<int,int>> d;
d.emplace_back(1, 2); // {1,2} 제자리 생성해 뒤에 추가
push_back이 이미 있는 객체를 복사/이동하는 반면, emplace_back은 생성자 인자를 직접 받아 제자리에서 만들어 임시 객체 생성을 피해요.