C++11의 컨테이너에 emplace 시리즈 메소드가 생겼다. 요놈들은 뭐하는 놈들일까? 일단 내가 전혀 뜻을 모르는 영어단어라 사전을 찾아보니, '설치하다'라고 나온다. 이게 뭐여...
형태도 얄딱꾸리하게 생긴 녀석이다.
이렇게 생긴 녀석인데, 하는 일은 insert나 push_back/push_front 랑 비슷하다. 컨테이너에 원소 하나를 추가하는 일을 한다.
다만 기존 insert/push 시리즈는 넣을 객체를 caller에서 예쁘게 만들어서 전달하는데 이 과정에서 의도치 않게 임시객체가 뿅~하고 만들어지고 사라지는 부하가 생길 수 있다.
반면, emplace는 노드에 추가할 때, 주어진 인자(위에서 args)를 이용하여 객체의 생성자를 호출한다. 따라서 임시객체를 만들지 않거나, 임시객체 생성횟수를 줄여준다.
어지간한 경우에 emplace류가 insert/push류보다 빠르다고는 되어 있는데, effective c++이나 modern c++에서 찾아봐야겠다. 뭔가 함정이 있을 것 같은 느낌이 있달까.
* Fundamental types(int, char, long ...)에게는 아무런 의미가 없다~
형태도 얄딱꾸리하게 생긴 녀석이다.
template< class... Args > iterator emplace( const_iterator pos, Args&&... args );
이렇게 생긴 녀석인데, 하는 일은 insert나 push_back/push_front 랑 비슷하다. 컨테이너에 원소 하나를 추가하는 일을 한다.
다만 기존 insert/push 시리즈는 넣을 객체를 caller에서 예쁘게 만들어서 전달하는데 이 과정에서 의도치 않게 임시객체가 뿅~하고 만들어지고 사라지는 부하가 생길 수 있다.
반면, emplace는 노드에 추가할 때, 주어진 인자(위에서 args)를 이용하여 객체의 생성자를 호출한다. 따라서 임시객체를 만들지 않거나, 임시객체 생성횟수를 줄여준다.
어지간한 경우에 emplace류가 insert/push류보다 빠르다고는 되어 있는데, effective c++이나 modern c++에서 찾아봐야겠다. 뭔가 함정이 있을 것 같은 느낌이 있달까.
* Fundamental types(int, char, long ...)에게는 아무런 의미가 없다~
댓글
댓글 쓰기