std::vector::emplace_back (modern c++)

https://en.cppreference.com/w/cpp/container/list/emplace_back
https://en.cppreference.com/w/cpp/container/deque/emplace_back
https://en.cppreference.com/w/cpp/container/vector/emplace_back

list,deque,vector 에 사용가능한 멤버 함수 c++11 에 처음 추가 되었으며
가변인자 템플릿을 인자로 받는다
인자로는 vector 의 instance / class 인 경우 생성자를 넣어 주어야 한다
emplace_back 의 경우 일반 push_back 과 다르게 vector 로 복사되는 흐름이 아닌
vector 에 element 가 생기는 동시에 초기값을 넣어주게되어 복사가 일어나거나 임시객체가 생성되지 않아 좀더 빠른 코드

#include <vector>
void function() {
  	vector<int> intVector;
	intVector.emplace_back(1);
  	printf("%d"), intVector.rbegin());
}

c++17 이후의 return value 는 해당 emplace_back 으로 추가된 element 의 reference 를 반환 하게 되며
이전 버전 코드에서 부자연 스럽게 작성되던 코드가 좀더 자연스럽게 되었다

#include <vector>
void function() {
  	vector<int> intVector;
	auto& ref = intVector.emplace_back(1);
  	printf("%d"), ref);
}

또하나 다른점은 17 이후에 reference 를 return 하다가 c++20 이후의 return 의 경우 constexpr reference return 으로 변경 되었다


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다