본문 바로가기

Programming/C++

vector push_back vs emplace_back

1. push_back

  • 원형
    • void push_back(const value_type& value);
  • 인자
    • value : 추가할 원소 값
    • value_type : 추가할 원소들의 타입
  • 리턴 값
    • 없음
    • 재할당 발생 시 Allocator::allocate()를 통해 예외 처리 가능
    • 할당 실 패 시 bad_alloc
  • 기능
    • vector의 요소 끝에 원소 추가
  • 작동 방식
    • 삭입할 객체 받음
    • push_back 내에 임시 객체 생성
    • 임시 객체를 vector에 추가
    • 임시 객체 소멸
  • 장점
    • 암시적인 생성자만 생성
    • 포인터를 변수로 사용할 시 안전
  • 단점
    • 생성자와 소멸자가 두번씩 호출 되어 성능 저하

2. emplae

  • 원형
    • iterator emplace (Arg&&.. args);
  • 인자
    • args : 가변인자들
  • 리턴 값
    • 없음
  • 기능
    • vector의 요소 끝에 원소 추가
  • 작동박식
    • 삽입할 객체를 받음
    • vector 내에서 직접 객체 생성
  • 장점
    • 임시 객체의 생성/파괴/복사가 이루어지지 않으므로 성능이 빠름
  • 단점
    • 모든 유형의 생성자를 호출
    • 포인터 형식을 받았을 경우 정상동작 하지 않을 수 있음
      • 생성자는 호출이 되었으나, 소멸자 시 delete 되지 않아 오류 발생 할 수 있음

 

'Programming > C++' 카테고리의 다른 글

정수 제한  (0) 2022.03.04
우선 순위 큐 (Priority Queue)  (0) 2021.02.19
prev_permutation(), next_permutation()  (0) 2021.01.07
strftime()  (0) 2020.08.30