※ 요약

std::vector의 멤버 함수인 push_back에 대한 내용이다. 멤버 함수 push_back은 vector의 끝에 요소를 추가할때 사용하는 함수며, 이번 포스팅에서는 C++03과 C++11에서의 사용방법에 대해 간단히 알아보도록 하겠다. 참고로 아래 내용은 vector의 특성을 알고 있다고 전제하고 진행하니 vector의 특성을 잘 모르면 이 게시물을 참고하기 바란다. 또 push_back과 같은 기능을 하지만 성능상 더 유리한 emplace_back에 대한 내용도 정리한게 있으니 꼭 읽어보기 바란다.

※ 함수 원형

void push_back( const T& value );
void push_back( T&& value );        //C++11

push_back의 함수 원형은 C++03때까지 하나였다가 C++11에 추가된 Move Semantics(R-Value) 개념 때문에 하나가 더 추가되서 2개다. 첫 번째는 기존처럼 값 복사를 통해 요소를 추가하고, 두 번째는 (임시)객체의 복사가 아닌 이동을 통해 요소를 추가하므로 불필요한 복사 과정을 없애 오버헤드를 줄였다. Move Semantics나 R-Value에 대해 더 알고 싶으면 이 게시물에 있는 "02. Rvalue Reference and constexpr.pdf"를 보기 바란다.

※ C++03 기본 자료형 예제

아래는 push_back을 이용해 요소를 추가하는 간단한 예제다.


아래 이미지를 보면 vecInt와 vecDouble, vecInt1에 각각 5와 6, 9, 13, 5.0, 6.0이 잘 추가된 것을 확인할 수 있다.


※ C++11 기본 자료형 예제

C++11에서는 initializer_list라는 클래스 템플릿이라는 걸 제공해주는데, 아래와 같이 컨테이너를 선언과 동시에 편하게 초기화할 수 있다. 또 달라진 점으로는 push_back(4)인데, 리터럴 상수인 4는 move semantics를 통해 T&& value를 인자로 받는 함수가 호출된다. 이전 버전의 C++이었다면 push_back( const T& value )가 호출 되었을 것이다.


아래와 같이 값이 잘 추가되었다.


※ 사용자 정의형 예제

아래 예제는 사용자 정의형(구조체나 클래스)에 대한 예제다. 위에 있는 예제들처럼 push_back에 대한 예제이며 기본 데이터형이 아닌 사용자 정의형 데이터를 추가한다는 것만 빼면 위의 예제들과 다를게 없으므로 따로 설명은 하지 않겠다.


아래처럼 값이 잘 들어갔다.



※ 예제

위의 예제들은 어디까지나 설명을 위해 급조한 예제들이고, 아래 소스는 실제 사용예이다. 아래 소스에 대해 간단히 설명하자면 select 쿼리를 날리고 조회된 데이터 행의 개수에 따라 vector의 메모리 공간을 reserve 함수를 통해 미리 예약하고 데이터를 push_back하는 예제이다. 멤버함수 reserve에 대해서는 나중에 알아보도록 하겠다.



'STL - Containers > vector' 카테고리의 다른 글

[C++ STL] std::vector - emplace_back  (3) 2016.04.15
[C++ STL] std::vector 주요 멤버 함수 목록  (0) 2015.11.23
[C++ STL] std::vector 개요  (3) 2015.11.10

+ Recent posts