emplace_back 과 push_back의 차이

김민수·2025년 1월 8일

C++

목록 보기
14/68

1. push_back

push_back이미 만들어진 객체를 컨테이너에 넣을 때 사용한다.
쉽게 말해, 이미 완성된 물건을 "상자"(std::vector)에 넣는 방식이다.

std::vector<int> vec;
int num = 10;  // num이라는 변수 생성
vec.push_back(num);  // vec에 num을 복사해서 넣음
  • 이미 만들어진 객체를 복사하거나 이동해서 넣음
  • 추가하는 과정에서 객체가 한 번 더 복사되거나 이동될 수 있음
  • 1개의 인자만 받을 수 있음


2. emplace_back

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


3. 차이점

특징push_backemplace_back
동작 방식이미 생성된 객체를 컨테이너에 추가컨테이너 내부에서 객체를 직접 생성
복사/이동 생성자필요불필요
성능복사/이동 비용 발생 가능더 효율적 (불필요한 복사/이동 없음)
사용 시점이미 생성된 객체를 삽입할 때 사용객체를 새로 생성하며 삽입할 때 사용
인자1개여러 개


4. 요약

  • push_back : 이미 만들어진 데이터를 넣을 때 사용, 복사 비용 발생, 인자를 1개만 받아서 넣을 수 있음
  • emplace_back : 데이터를 새로 만들면서 바로 넣을 때 사용, 불필요한 복사가 없어 비용이 발생하지 않음, 인자를 여러 개 받아서 넣을 수 있음
profile
안녕하세요

0개의 댓글