C++

C++ std::vector push_back 보단 emplace_back 을 사용하자

emplace_back 을 사용하자

emplace_back 은 c++11 에 추가된 std::vector 의 멤버함수다.
보통 vector 에 값을 넣을 때, 아래와 같이 push_back 을 사용할 것이다.

1
2
3
4
5
6
std::vector<std::string> strList;
// 이렇게 객체를 하나 선언해서 넣거나
std::string A = "test";
strList.push_back(A);
// 임시 객체를 바로 전달하는 방식
strList.push_back(std::string("test"));

위와 같이 작성하는 것이 일반적이지만 성능 측면에서 봤을 때 emplace_back 을 사용하는 것이 훨씬 효과적이다.

1
2
3
4
5
6
std::vector<std::string> strList;
strList.emplace_back("test");

// pair 나 생성자가 있는 다른 모든 class 도 가능
std::vector<std::pair<int, int>> pairList;
pairList.emplace_back(3, 5);

push_back 을 사용할 때는 vector 에 값을 넣기 위해 바깥에서 임시 객체의 생성자 / 소멸자가 호출되고 vector 내부에 복사되는 과정에서 또 객체가 한번 더 생성이 되지만,
emplace_back 을 사용하면, 생성자의 인자 value 들만 전달해주면 vector 내부에서 한번만 객체 생성을 한다.

거의 대부분의 경우에서 emplace_back 을 사용하는 경우의 속도가 더 빠르고 push_back 을 완벽히 대체할 수 있어서 emplace_back 사용을 권장한다고 한다. 프로젝트에서 C++11 이상을 사용한다면 emplace_back 사용을 고려해보자.