" Park 기술 블로그 "
# 카테고리
# 도구
[C/C++] emplace_back에 대해서
2021-06-08 15:47:01

 오늘 오전에 알고리즘을 풀고나서 다른 사람의 코드를 보던 중 emplace_back()이라는 vector의 메서드를 봤다.

vector STL 중에서 뒤에 원소를 추가할 때는 push_back() 메서드를 사용했었는데 처음 본 메서드라서 궁금했다.

 

 결론은, 똑같은 동작을 하지만 push_back() 메서드의 성능을 향상시킨 것이 emplace_back() 메서드다.

 

 push_back()의 사용법은 vector에 추가하려는 인스턴스를 인자로 전달하면 되지만, emplace_back()은 인스턴스를 인자로 전달하지 않고 인스턴스의 생성자에 전달되는 인자들을 넣으면 된다.

 

 push_back() 메서드를 사용하면 인자로 전달되는 인스턴스를 만들 때 생성 1번이 이루어지고 파라미터로 전달 받아질 때 생성 1번 후 복사, push_back() 메서드가 끝나고 나서 인자로 전달됐던 인스턴스 폐기 1번과 push_back() 메서드 안에서 복사됐던 인스턴스 폐기 1번까지 해서 총 생성 2번과 폐기 2번이 이루어진다. 

 

 이 문제를 더 좋은 성능으로 동작하도록 해결하는 방법을 사용한 것이 emplace_back() 메서드다. 성능 향상의 해결법은 인자로 전달되는 인스턴스를 만들지 않는 것에서 출발한다. 즉 emplace_back() 메서드는 push_back() 메서드처럼 vector 뒤에 요소를 추가하는 동일한 동작을 하지만 push_back() 메서드처럼 인스턴스를 전달하는 것이 아니라 vector의 요소에 해당하는 생성자 인자들을 전달해 줌으로서 emplace_back() 내부에서 vector 요소를 추가하게되어 push_back() 메서드보다 성능을 향상시킨다.

 

참조:

https://blog.naver.com/sorkelf/220825930008

 

0
# 댓글 + 새 댓글 작성
# 새 댓글 작성
댓글 암호는 댓글 삭제 시 필요합니다.
# 님에게 답변 작성
대댓글 암호는 댓글 삭제 시 필요합니다.
# 님의 댓글 삭제
댓글 작성 시 입력했던 암호를 입력해주세요.
아직 댓글이 없습니다