push_back 함수와 emplace_bark 함수, 모두 Vector의 마지막에 새로운 원소를 추가하기 위해 사용하는 함수이다.
그렇다면, push_back 함수와 emplace_back의 차이점을 알아보자.
Push_back
push_back의 경우에는 Vector의 마지막에 새로운 원소를 추가하기 전에 임시 객체를 생성한다. 이때, Vector에 push할 값을 임시 객체에 값을 복사한 후, Vector에 삽입하는 과정을 거친다. 삽입이 끝나면 임시 객체 또한 파괴된다.
임시 객체를 생성함으로서, 메모리를 잠시 할당함으로서 메모리 연산 과정에서 생성자와 소멸자가 호출되어 불필요한 연산이 생긴다.
주의해야할 사항은, Push_back 하기 이전에 vector<type> 형에 맞추어 배열의 형태에 맞는 인자의 값으로 할당해야한다.
vector<vector<int>> vec;
vec.push_back(3) // 컴파일 에러
vector<vector<int>> vec;
vec.push_back({1, 2}) // 컴파일 성공
emplace_back
emplace_back은 가변인자 템플릿을 사용해서 삽입하려는 자료형에 따라, 함수 내에서 삽입을 위한 객체를 자체적으로 생성할 수 있다. 따라서 함수 내에 자체적으로 객체를 생성하기 때문에, 불필요한 임시 객체를 생성하지 않는다.
이에 따라 불필요한 메모리 할당을 하지 않기 때문에 생성, 소멸을 위한 연산이 필요없다.
emplace_back의 단점으로는, 2차원 배열의 인자 값을 배열에 넣는것이 불가능하다.
vector<vector<int>> vec;
vec.push_back(3) // 컴파일 성공
vector<vector<int>> vec;
vec.push_back({1, 2}) // 컴파일 에러
'C++' 카테고리의 다른 글
String 메서드 (0) | 2024.05.24 |
---|---|
개행 문자 입력 방식 (0) | 2024.05.24 |
Fill 함수 (0) | 2024.03.26 |
표준 템플릿 라이브러리 (0) | 2024.03.18 |
Pair 클래스 (0) | 2024.03.12 |