※ 함수 원형
template< class... Args >
void emplace_back( Args&&... args );
emplace의 함수 원형은 하나다. push_back과 다르게 가변인자 템플릿 문법을 이용하여 가변인자를 받는다.
※ 예제
설명을 위해 아래와 같이 임시로 예제를 작성해봤다.
먼저 push_back으로 삽입을 했을때 결과이다. push_back에 삽입하기 위해 객체를 만들어 전달했고 내부적으로 또 임시객체를 만들어 아래와 같이 호출이 많아 성능상 불리하다.
emplace_back으로 삽입할 경우, 생성에 필요한 인자를 받아 내부에서 생성 삽입하므로 아래와 같이 생성자, 소멸자를 한 번씩만 호출하여 성능상 유리하다
.
emplace_back은 함수 원형에서 본 거와 같이 가변 인자를 받을 수 있어서 아래와 같이 인자를 넣을 수 있으며, 받은 인자를 std::vector안에서 직접 CStationObj를 생성하므로 push_back보다 성능상 낫다.
※ 참고 사항
- push_back으로 하여도 컴파일러 내부적으로 최적화 하기 때문에 emplace_back으로 하는 것과 별차이가 없을 수 있다. 고로 개인 프로젝트가 아니라면 호환성이 더 좋은 push_back 사용이 더 나을 수도 있다.
- push_back함수로 할 수 있는 모든 것을 emplace_back으로 할 수 있다.
- push_back함수보다 emplace_back 함수가 대체로 효율적이다.(무조건적인건 아님 반대로 push_back이 더 효율적일 때도 있음)
'STL - Containers > vector' 카테고리의 다른 글
[C++ STL] std::vector - push_back (0) | 2016.02.19 |
---|---|
[C++ STL] std::vector 주요 멤버 함수 목록 (0) | 2015.11.23 |
[C++ STL] std::vector 개요 (3) | 2015.11.10 |