push_back은 벡터의 끝에 인자 값을 추가하는 vector 클래스의 함수입니다. 이 때 push_back은 추가할 인자 값은 현재 위치에서 값을 복사하거나 이동하여 벡터에 추가됩니다.
std::vector<int> v;
int x = 1;
v.push_back(x); // v 벡터에서 이제 [1]을 포함합니다
위 예에서 push_back은 인자 값 x를 복사하여 벡터의 끝에 추가합니다. 즉, 인자 값(1)의 새로운 복사본이 생성되어 벡터에 추가되고 원래 요소인 x는 변경되지 않은 상태로 유지됩니다.
반면에 emplace_back 또한 벡터에 끝에 인자 값을 추가하는 vector 클래스의 함수이지만, 기존 값들을 복사하거나 이동하는 연산을 하지 않고, 제자리에서 인자값을 구성하여 생성합니다. 이로 인해 인자 값을 복사하거나 이동하는 데 프로세스의 처리 비용이 들지 않아 push_back 보다 효울적입니다.
std::vector<std::string> v;
v.emplace_back("Hello"); // v 벡터에서 이제 [Hello]를 포함합니다
위 예에서 emplace_back은 문자열 'Hello'를 제자리에서 구성하여 벡터의 끝에 새 인자 값을 추가합니다. 즉, 기존에 있던 값들을 복사하거나 이동할 필요 없이 새로운 인자 값이 벡터 내부에 직접 생성됩니다. 아울러 emplace_back은 추가할 새로운 인자 값을 생성자에서 전달하여 원하는 값을 가질 수 있어 사용자가 원하는 형식으로 인자 값을 넣어줄 수 있습니다.
std::vector<std::pair<int, int>> v;
v.emplace_back(1, 2); // v 벡터에서 이제 [(1, 2)]의 값을 가집니다.
위 예에서 emplace_back은 int형 정수 1과 2를 사용하여 제자리에서 구성후 벡터의 끝에 새로운 인자 값을 추가합니다.
결론 :
push_back은 삽입할 객체를 임시 객체로 만들어 push_back 함수 내부에서 복사를 한 후 vector에 이동하여 추가하고,
emplace_back은 삽입할 객체를 생성자에서 인자로 받아 vector 내부에서 직접 객체를 생성&삽입하여 push_back에서 일어나는 복사, 이동하지 않아도 되어 성능상 유리하다.
보다 자세한 내용은 및 출처 : https://blog.naver.com/sorkelf/220825930008
'공부 > C++' 카테고리의 다른 글
가상 함수(Virtual Function)와 가상 함수 테이블(Virtual Function Table) 개념 및 차이 (0) | 2022.12.22 |
---|---|
Vector resize, reserve의 차이점 (0) | 2022.12.21 |
포인터(Pointer)와 참조자(Reference)의 차이 (1) | 2022.12.20 |
구조체(Struct)와 클래스(Class)의 개념과 차이 (2) | 2022.12.14 |
열거형(enum)과 열거형 클래스(enum class)의 개념, 사용법, 차이점 (0) | 2022.12.14 |