template

std::vector로 배우는 레벨업 #2

01/18/2018 c++, programming No comments , ,

std::vector로 배우는 레벨업 #1에 이어서…

resize를 구현해 보자

아래 테스트 코드를 통해 동작을 확인해보자.

 

std::vector로 배우는 레벨업 #1

01/17/2018 c++, programming No comments , ,

선행학습: std::vector의 size와 capacity에 대해서 제대로 알고있자

std::vector의 push_back과 reserve를 한번 직접 구현해보자..

언뜻 생각해보면 template에 대해서 조금만 알고 있으면 다음과 같이 쉽게 구현 할 수 있을 거라는 생각이 들 것이다.

한번 다음의 테스트 코드로 std::vector과 MyVector의 출력결과가 어떻게 다른지 확인해 보면….

push_back을 했을때 복사생성자가 호출되느냐 대입연산자가 호출되느냐는 c++ 버젼에 따라 차이가 있을 수 있으니, 동일하다고 치고,

stl버젼은 reserve를 했을때 생성자가 호출되지 않지만, MyVector는 생성자가 2번 호출되는 차이점을 볼 수 있다.

이 차이가 의미하는 것은 무엇일까?

 

눈치가 빠른분들은 이미 감을 잡으셨을 것이다.

그렇다. vector에서 reserve함수를 통하여 capacity의 크기를 늘린다는 것은 메모리공간만 할당하는 것이지, 실제 객체가 생성되는 것은 아니다.

혹시, 아직 c++에서 객체 생성의 의미를 정확히 모르고 있었다면, 이제는 정확히 이해 했을 것이다.

(잘 모르겠으면 ‘c++에서 malloc과 new의 차이점‘을 읽어보자)

 

그럼 한번 요구사항에 맞게 코드를 고쳐보자

이제 std::vector와 동일한 결과가 나옴을 확인 할 수 있을 것이다.

tuple의 모든 타입이 arithmetic type 인지 알아내는 템플릿 클래스

09/13/2016 c++, programming No comments ,

최근에 C#으로 코딩좀 하고 있는데…

역시 c++의 강력한 template이 그립다..

개인적으로 OOP형태의 언어에서는 c++의 template 때문에 c++을 버릴 수 없을 것 같다. ㅠ

필요할 것 같아서 작성했는데…

std::is_arithmetic 은 integral type(short, int, __int64 …) 이나 floating-point type(float, double) 이면 true이다.

이걸 tuple의 모든 항목이 true인지 검사하는 템플릿 클래스를 만들어 보았다.

참고로, std::is_arithmetic< std::tuple<…> >::value = false 이다.

응용하면 std::is_integral, std::is_floating_point, std::is_same 등도 만들 수 있다.

VS2015기준으로 작성되어있다.