'C++' std::emplace_back, std::push_back

토스트·2025년 4월 29일

'C++' std::vector

목록 보기
4/6

emplae_back

template<class... Args>
void emplace_back(Args&&... args); 

: vector의 끝에 새 요소를 args를 사용하여 생성합니다.

push_back

void push_back(const value_type& val);
void push_back(value_type&& val);

: vector의 끝에 새 요소 val를 복사하거나 이동시킵니다.

emplace_back VS push_back

공통점 : 새 벡터의 크기가 현재 벡터의 용량을 초과하는 경우 저장 공간이 자동으로 재할당됩니다.

emplace_back

  • 객체를 직접 컨테이너 내부에서 생성 (생성자 직접 호출)
  • 직접 생성 시 오버헤드 없습니다.

push_back

  • 이미 생성된 객체를 복사하거나 이동해서 추가
  • 복사/이동 오버헤드가 발생합니다.

push_back을 사용하는 이유
1. 가독성 & 명시성
2. 디버깅이 상대적으로 쉬움

push_back을 사용하는 시기
: 이미 만들어진 객체를 넣을 때 사용합니다.

<example>

#include <iostream>
#include <vector>

using namespace std;

int main() {
	vector<int> vec;

	vec.emplace_back(1);

	int a = 3; // 삽입할 객체를 생성

	vec.push_back(a); 
	vec.emplace_back(a); // a를 전달받아 생성자를 호출

	for (const int& i : vec) {
		cout << i << ' ';
	}

	return 0;
}

결과값

0개의 댓글