IT/C++
-
vector의 clear 메소드에 대해IT/C++ 2019. 9. 29. 17:05
clear라는 메소드 명을 보면 어떤 동작을 할 것 같은 메소드인지 감이오는가? http://www.cplusplus.com 을 보면 Removes all elements from the vector 라고 쓰여있다. 즉 vector의 모든 원소들을 Remove 해주는 메소드 라고 볼 수 있다. 근데 Remove란 대체 어떤 동작일까? 좀 애매한 설명이지 않은가? 다음과 같은 코드를보자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include using namespace std; int main() { vector a = { 1,2,3,4 }; for (auto it : a) { cout _Mylast() = this->_Myfirst(); } 위가 clear의 내부구현이..
-
pow 함수의 내부 구현에 대해...IT/C++ 2019. 7. 28. 19:34
지수함수(pow) 즉 $$x^y$$ 의 시간복잡도는 얼마나 될까? y를 N이라고 한다면 일반적으로는 분할정복을 통해 구현한 O(logN) 이다.(x의 크기에 종속적이지 않다고 가정하자) 그렇다면 pow(5, 1) 과 pow(5, 64)의 실행시간을 측정해보면 이론적으로는 8배, 자잘한 로직처리까지 생각해도 의미있는 차이가 있어야 한다. 실제로 코드를 돌려보면 다음과 같은 측정결과를 볼 수 있다.(각각 1000만회씩 루프를 돌렸다) 놀랍게도 유의미한 차이가 나지 않는다. 그 이유는 pow함수는 내부적으로 x86과 이를 계승한 amd64 아키텍처에 포함된 FYL2X 명령어를 통해 구현되어 있기 때문이다. 여기서 잠깐 FYL2X명령어가 어떤것인지 보고가자. (출처 : https://c9x.me/x86/html..
-
C++에서 2차원 배열 인자로 받기IT/C++ 2019. 6. 29. 20:17
한때 알고리즘에 매진한적이 있는데 그때 2차원배열을 인자로 받으려고 고생좀 했다. 구글에 서치해서 볼 수 있는 가장 보편적인 방법은 1 2 3 4 5 void getArray(int arr[4][3], int row, int col){}; void getArray(int arr[][3], int row, int col){}; void getArray(int (*arr)[3], int row, int col){}; 위와 같이 받는 방법인데...뭔가 Dynamic한 맛이 없어서 좀 아쉽다. 오늘 잠깐 Modern Effective C++을 읽던중에 재미있는 방법이 있어서 소개한다, 거창한건 아니고... 1 2 template void getArray(T& arr, int row, int col) {}; 이렇..
-
C++ 쓰는 회사에서 일해보고싶다IT/C++ 2019. 6. 29. 19:54
C++은 굉장히 변태적인 언어다. JAVA같은 언어들에는 없는 포인터가 있는것만으로도 꽤나 햇갈리는데다가 각종 타입에 제약에 모던 C++문법까지 들어가게되면 사람들 편하게 쓰라고 만들어놓은건지 의문이 생긴다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 template struct _Vec_base_types { // types needed for a container base using _Alty = _Rebind_alloc_t; using _Alty_traits = allocator_traits; using _Val_types = conditional_t; }; Colored by Color Scripter (C++을 많이 접해보지 않았다면 이런 문법만봐도 어질어질해진다..