[C++11] std::make_pair / std::move / std::swap
#std::make_pair
std::make_pair(element1, element2)
간단히, 두 element를 묶어 쌍으로 구성해주는 기능을 한다.
파라메터로는
first : 쌍의 첫 번째 element 를 가리킴
second : 쌍의 두 번째 element 를 가리킴
ex)
std::pair <int, char> p1 ;
p1 = std::make_pare (1, 'a');
p1.first // 1
p1.second // a
#std::move
객체에 RValue reference를 반환 해준다.
copy를 피하기 위하여 사용된다.
ex1)
int a = 1;
int b;
b = a // a = 1, b = 1
b = std::move(a) // b = 1 , a loses its value
ex2) - swap
template <class T>
swap1(T& v1, T& v2) {
T temp(v1); // v1의 값이 2개
v1 = v2 ; // v2의 값이 2개 , v1 값 한 개 사라짐
v2 = temp ; // temp의 값이 2개 , v2 값 한 개 사라짐
}
--> 각 단계 마다 copy가 일어남
template <class T>
swap1(T& v1, T& v2) {
T temp(std::move(v1));
v1 = std::move(v2);
v2 = std::move(temp) ;
}
--> 값의 copy가 아닌 move --> 효율적인 메모리사용
# std::swap
두 객체 간의 값을 바꾸어 준다.
swap(T& a, T& b)
swap(T& a[N], T& b[N])
int a = 1, b= 10;
std::swap(a,b) // a = 10, b = 1;
int a[2] = {10, 20};
int b[2] = {1,2};
std::swap(a,b) // a = {1,2}, b = {10,20}