본문 바로가기

C++

STL vector에서 push_back과 emplace_back의 차이점

push_back, emplace_back : vector의 요소 끝에 원소를 추가하는 함수이다.

 

두함수의 차이 : push_back과 같은 삽입 함수들은 삽입할 객체를 받지만 emplace_back과 같은 생성 삽입 함수는 삽입할 객체의 생성자를 위한 인자들을 받아 std::vector 내에서 직접 객체를 생성하여 삽입하므로 임시 객체의 생성과 파괴, 복사(혹은 move)를 하지 않아도 되어 성능상 더 유리하다는 것이다.

 

push_back은 전달받은 객체를 임의 복사하거나 이동시켜서 값을 복사합니다. 즉, 따로 추가 연산작업이 필요합니다.

emplace_back은 필요한 인자를 직접 parameter로 받아 내부에서 생성-삽입-소멸 하므로 따로 임시 객체가 생성되지 않습니다.

 

결과 : push_back으로 하여도 컴파일러 내부적으로 최적화 하기 때문에 emplace_back으로 하는 것과 별차이가 없을 수 있다. 그러나 모든 상황에서 emplace_back이 유리하다고 할 순 없습니다. push_back이 효율적일 수도 있습니다.

push_back으로 하여도 컴파일러 내부적으로 최적화 하기 때문에 emplace_back으로 하는 것과 별차이가 없을 수 있다. 고로 개인 프로젝트가 아니라면 호환성이 더 좋은 push_back 사용이 더 나을 수도 있다.

 


참고 사이트

https://shaeod.tistory.com/630

 

[C++ STL] std::vector - emplace_back

※ 요약 std::vector의 멤버 함수인 emplace_back은 C++11부터 추가된 멤버 함수로써 push_back과 같이 vector의 요소 끝에 원소를 추가하는 함수이다. 두 함수의 가장 큰 차이점은, push_back과 같은 삽입 함수..

shaeod.tistory.com

https://cru6548.tistory.com/20

'C++' 카테고리의 다른 글

C++ 구조체(struct)  (0) 2020.07.20
Inline함수  (0) 2020.01.19
C++의 Casting,형변환  (0) 2020.01.19
C++ 가상 함수(Virtual),순수 가상 함수 , 가상 소멸자  (0) 2019.10.17
Precompiled header(미리컴파일 헤더)  (0) 2019.09.04