스콧 마이어스 형님의 Effective c++ 항목1~27까지 읽고 개인적으로 이해한 내용을 키워드를 중심으로 정리한 내용입니다 :) C++의 효과적인 방법 책의 구성 = 일반적인 설계전략 + C++만의 언어적 특징에 관련된 실전 세부사항 설계이슈 > 접근들 > "선택방법" "선택방법" 안목이 올라간다. 항목 1 : C++ 언어들의 연합체로 바라보는 안목은 필수 C++ : Multi Paradugm Progrmming Language (다중 패러다임 프로그래밍 언어) Procedual 기반 -> Obejct Oriented, Functional, Generic, Meta Progr..
이번글은 제가 Effective C++ 항목 24 부분을 공부한 내용과 컴파일 과정,(전처리, 어셈블리, 링킹), header gouard 에 대한 정리 글입니다. 컴파일 과정 먼저 C++ 의 컴파일 과정은 1. #include, #define과 같은 전처리기 메크로를 처리하는 Preprocessing 단계 (전처리 단계) 2. source code를 Assembly 명령어로 변환하는 compile단계. 3. Assembly 코드들을 실제 기계어로 이루어진 목적 코드(Object file)로 변환하는 어셈블 단계 4. 목적 코드들을 한데 모아서 하나의 실행파일로 만들어주는 Linking단계로 나누어 볼 수 있습니다. 이후 1~4를 수행하고 나면 실행파일이 나오게 됩니다. (윈도우 계열에서는 Portabl..
Linear Search 보다는 상대적으로 복잡하지만 자료구조의 원소가 "정렬"되어 있을 경우 O(log n)으로 동작하는 이진 탐색을 반복문과 재귀함수로 구현해보도록 하겠습니다. 먼저 이진탐색의 로직은 정렬되어 있는 데이터의 첫번째 부분 first, 데이터의 마지막 원소 last 인덱스를 구한뒤 (first + last) / 2를 통해 mid인덱스를 구합니다. (나머지는 버립니다) 이후 mid인덱스에 들어 있는 값이 찾을려고 하는 값과 같다면 그대로 값을 찾은 것이고 찾을려고 하는 값이 mid인덱스에 들어있는 값보다 작다면 last를 mid - 1로 변경한뒤 first와 last를 다시 합한뒤 2로 나누어 mid를 다시 구해 줄 수 있습니다. 종료 조건은 first가 last보다 클 경우 입니다. fi..
이번글은 간단한 Iterator의 종류와 구분방식을 살펴보고 정리한 뒤 advance, distance를 직접 구현한 글입니다 :) (STL 기본 컨테이너의 동작방식이나 개념은 없습니당) STL의 vector, deque, list는 sequence container로 원소의 위치가 정해진 상태로 삽입됩니다. STL의 set, multiset, map, multimap의 경우 associate containder로 원소의 삽입 위치가 특정 조건에 따라 달라집니다.(default는 less() 입니다) 또한 시퀀스 컨테이너는 선형적이며, 연관 컨테이너는 비선형적 이라고 구분할 수 있습니다. 그중에서도 STL의 vetor, deque가 배열기반의 컨테이너이며(데이터 여러개가 하나의 메모리 단위에 저장) li..
위 처럼 프로젝트를 생성하시면 // BrickOut.cpp : 애플리케이션에 대한 진입점을 정의합니다. // #include "framework.h" #include "BrickOut.h" #define MAX_LOADSTRING 100 // 전역 변수: HINSTANCE hInst; // 현재 인스턴스입니다. WCHAR szTitle[MAX_LOADSTRING]; // 제목 표시줄 텍스트입니다. WCHAR szWindowClass[MAX_LOADSTRING]; // 기본 창 클래스 이름입니다. // 이 코드 모듈에 포함된 함수의 선언을 전달합니다: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT C..
이번 글은 정렬 알고리즘 중에서 Quick Sort에 대한 글입니다. 퀵 정렬은 불안정 정렬에 속하며 다른 원소와의 비교만으로 정렬을 수행하는 비교정렬에 속합니다. 퀵 정렬은 합병정렬과 비슷하게 분할 정복(Divide And Conquer)알고리즘을 사용합니다. C++ STL의 sort()의 경우 순차열 [b, e) 원소들을 퀵 정렬로 수행하기 때문에 평균적으로는 O(N log N)의 시간복잡도를 보장을 하며 최악의 경우 O(N^2)의 시간 복잡도를 가집니다. 퀵 정렬의 원리는 pivot을 임의의 인덱스에 하나잡은 뒤 Left/Right Pivot을 양 끝으로 잡고 현재 Pivot보다 작은 값들은 왼쪽으로, Pivot보다 큰 값들은 오른쪽으로 옮기면 됩니다! 이후 Pivot을 제외한 왼쪽 부분과 오른쪽 ..
제가 상속관계에서 형변환을 할 때와 virtual 유무에 대해 햇갈렸던 부분들을 정리한 글입니다. (틀린 부분있다면 말해주시면 감사하겠습니다) 먼저 형변환의 방법으로는 int a = 10; float b = (float)a; // 옛날 C 스타일 (구식) float c = float(a); // C++ 스타일 (신식) 위와 같은 방법과 C++의 형변환 연산자 아래의 4가지가 있습니다. - static_cast : 기본 자료형 간의 형변환과 클래스 상속관계에서의 형변환만 허용한다. 명시적 형변환 (C스타일 보다 안전하다) - const_cast : 포인터와 참조자의 const 성향을 제거하는 형 변환 - dynamic_cast : 상속관계에서의 안전한 형변환 - reinterpret_cast : 상관없는 ..
LiveCoding에 대해 호불호가 갈릴 수 있지만 저는 엄청 자주 쓰지는 않습니다. 물론 안좋다는 것은 절대 아닙니다. 아주 좋은 기능인거같아용.. 다만 저는 처음에 언리얼 사용시 라이브코딩을 통해서 작업했던 부분들이 다음날에 컴퓨터를 켰을 때 Update가 안되어 있던 경험이 있어 정리하게된 글입니다. 일단 언리얼 엔진에서 하나의 프로젝트에는 여러개의 "모듈"을 만들어 낼 수 있습니다. 모듈은 Build.cs파일, .h파일, .cpp파일의 모음인데 .uproject 파일을 메모장으로 열면, 모듈이름이 명시되어 있습니다. 해당 모듈은 C++프로젝트의 .Target.cs 파일에서도 명시가 되어있습니다. Target.cs에 모듈이 ExtraModuleNames.Add로 적어주어야 빌드시 이를 참고하여 빌드..