push_back은 이미 만들어진 객체를 컨테이너에 넣을 때 사용한다.
쉽게 말해, 이미 완성된 물건을 "상자"(std::vector)에 넣는 방식이다.
std::vector<int> vec;
int num = 10; // num이라는 변수 생성
vec.push_back(num); // vec에 num을 복사해서 넣음
emplace_back은 컨테이너 안에서 객체를 직접 만들면서 넣는 방식이다.
물건을 따로 만들어 가져오지 않고, 상자 안에서 바로 조립하는 방식이다.
std::vector<int> vec;
vec.emplace_back(10); // vec 안에서 바로 객체를 생성
struct Example {
std::string name;
int age;
Example(const std::string& n, int a) : name(n), age(a) {
std::cout << "Constructor called with name = " << name << ", age = " << age << "\n";
}
};
int main() {
std::vector<Example> vec;
vec.emplace_back("Alice", 25); // 문자열과 정수 전달
return 0;
}
출력:
Constructor called with name = Alice, age = 25
| 특징 | push_back | emplace_back |
|---|---|---|
| 동작 방식 | 이미 생성된 객체를 컨테이너에 추가 | 컨테이너 내부에서 객체를 직접 생성 |
| 복사/이동 생성자 | 필요 | 불필요 |
| 성능 | 복사/이동 비용 발생 가능 | 더 효율적 (불필요한 복사/이동 없음) |
| 사용 시점 | 이미 생성된 객체를 삽입할 때 사용 | 객체를 새로 생성하며 삽입할 때 사용 |
| 인자 | 1개 | 여러 개 |
push_back : 이미 만들어진 데이터를 넣을 때 사용, 복사 비용 발생, 인자를 1개만 받아서 넣을 수 있음emplace_back : 데이터를 새로 만들면서 바로 넣을 때 사용, 불필요한 복사가 없어 비용이 발생하지 않음, 인자를 여러 개 받아서 넣을 수 있음