[내일배움캠프 Day34] push_back과 emplace_back의 차이점

2025. 2. 6. 23:39·내일배움캠프/TIL

push_back()과 emplace_back() 둘 다 벡터의 뒤쪽에 원소를 추가합니다. 그런데 실제로 구현된 복사/이동 방식은 크게 다르며, 성능에서도 차이가 납니다.

 

push_back()

vs.push_back(s)는 문자열을 벡터로 복사합니다. 먼저, char *로 초기화된 새 문자열 객체가 암시적으로 생성됩니다. 그 다음 push_back()이 호출되는데, push_back()은 이동 생성자를 이용해 임시 문자열을 벡터로 복사합니다. 작업이 다 끝나면 임시 객체를 없앱니다.  

 

emplace_back()

vs.emplace_back(s)는 임시 문자열을 생성하지 않습니다. emplace_back()이 char *를 인수로 하여 직접 호출합니다. 그런 다음 이 char *로 초기화된 벡터에 저장할 문자열을 생성합니다. 따라서 불필요한 임시 문자열 객체를 생성하고 파괴할 필요가 없습니다.

 

#include <vector>
#include <string>
#include <iostream>

int main() {
    std::vector<std::string> vec1, vec2;
    
    std::string s = "hello";

    // push_back의 경우
    vec1.push_back(s);         // 복사 발생
    vec1.push_back(std::move(s)); // 이동 발생
    vec1.push_back("world");   // 임시 객체 생성 후 이동

    // emplace_back의 경우
    vec2.emplace_back("hello"); // 직접 생성, 불필요한 이동 없음
    vec2.emplace_back("world"); 

    return 0;
}

 

 

 

출처 : 266가지 문제로 정복하는 코딩 인터뷰 in C++

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프 Day37] TWeakObjectPtr  (0) 2025.02.11
[내일배움캠프 Day35] 알고리즘 수업 1주차 과제  (3) 2025.02.07
[내일배움캠프 Day32] 가상 함수 동작 원리  (0) 2025.02.04
[내일배움캠프 Day31] 순차 컨테이너  (3) 2025.02.03
[내일배움캠프 Day30] auto  (1) 2025.01.31
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프 Day37] TWeakObjectPtr
  • [내일배움캠프 Day35] 알고리즘 수업 1주차 과제
  • [내일배움캠프 Day32] 가상 함수 동작 원리
  • [내일배움캠프 Day31] 순차 컨테이너
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    컴퓨터구조
    언리얼
    c++
    알고리즘
    게임수학
    Effective
    객체지향
    컴퓨터 구조
    그래픽스
    내일배움캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[내일배움캠프 Day34] push_back과 emplace_back의 차이점
상단으로

티스토리툴바