끄적이는 메모장

[C++11] std::make_pair / std::move / std::swap 본문

C, C++, C#/C++ 공부

[C++11] std::make_pair / std::move / std::swap

밥보92 2018. 6. 7. 11:45
반응형

#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}

반응형

'C, C++, C# > C++ 공부' 카테고리의 다른 글

[C++11] tuple  (0) 2018.06.07
[C++11] std::all_of, / std::any_of / std::none_of  (0) 2018.06.07
[C++11] std::enable_shared_from_this  (0) 2018.06.07
[C++11] mutex  (0) 2018.06.01
[C++11] std::bind, std::placeholder  (0) 2018.05.31