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
'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 |