template void fucn(T&& param) { ... } "param의 형식은 오른값이지만 param자체는 왼값이다" 위의 코드와 문장을 보고 무슨말이신지 이해가 안 가신다면 https://cjbworld.tistory.com/27를 보고 와주시면 감사하겠습니다. 전달 참조란? auto, template 같은 "형식 연역"에서 type deduction 발생시 자주사용하는 개념입니다. (형식 연역 : 아직은 정해지지 않았지만 컴파일 타임에 때려 맞추겠다) 오른값 참조와 비슷하게 생긴 요녀석은 &&를 같이 사용합니다. 위 코드애서 p1는 lvalue입니다. 컴파일러 경고에 따르면 rvalue참조에다가 lvalue를 넣을 수 없다고 하는군요. 왜냐하면 mp의 형식은 오른값 참조이기 때문에 오른값을..
이번글은 오른값 참조와 전달(보편)참조에 대한 글입니다. (전달 참조는 보편참조로도 불립니다) 오른값의 개념이 Mordern C++ C++11부터 생겼으며 해당개념의 등장으로 C++속도의 엄청난 치아를 가져다 주었습니다. 먼저 오른값이 무엇인지 알아보기 전에 "왼값"이 무엇인지 개념부터 살펴보도록 하겠습니다. 왼값(lvalue, l-value)은 단일식을 넘어서 계속 유지되는 개체이며, 오른값(rvalue, r-value)는 "전체 개체에서 - 왼값" 인 개체입니다. 즉 임시객체나, 상수 등이 포함됩니다. 기존의 참조는 '&'하나만 사용하고 오른값 참조의 경우 '&&'두개를 사용합니다. template void fucn(T&& param) { ... } "param의 형식은 오른값이지만 param자체는 ..
이번글은 이진 탐색 트리(Binary Search Tree)에 대해 알아보고 구현을 해보도록 하겠습니다. 이번글의 BST는 균형의 개념이 안 들어간 BST입니다. (다음글에 균형잡는 AVL 트리를 이어서 적도록 하겠습니다.) 먼저 이진탐색 트리의 개념부터 살펴보도록 하겠습니다. BST는 이진트리의 확장된 버전입니다. (힙도 이진트리의 일종이지만 힙은 "완전 이진 트리"입니다.) 이진트리는 자식노드를 두개를 가지는 자료구조입니다. 이진트리를 기반으로 구현되어 있고 데이터를 빠르게 찾는데에 최적화 되어 있습니다. O(Log 2)를 탐색하는데 가집니다. BST의 핵심은 "삽입", "탐색", "삭제"입니다. 삽입의 핵심로직을 살펴보면 Root보다 값이 작다면 왼쪽에 데이터를 삽입하고 Root보다 값이 크다면 오..
Heap? 힙이라는 자료구조를 알아보기 전에 먼저 "우선순위 큐"가 무엇인지 잠시 살펴보겠습니다. PQ(우선순위 큐)는 "들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는" 특징을 가지고 있습니다. 즉, PQ는 데이터를 근거로 우선순위를 "판단"할 수 있어야 한다는 말입니다. 이 PQ를 구현을 할때 - 배열을 통해 구현 - 연결형 리스트를 통해 구현 - heap을 통해 구현 이렇게 세가지 정도로 볼 수 있습니다. 배열이나 연결형 리스트를 사용하면 PQ를 매우 간단히 구현할 수 있습니다. 하지만 이들은 PQ를 구현하는데에 있어서 그리 적합하지 않은데요 이유를 설명해드리도록 하겠습니다. 우선 "배열"의 경우 데이터의 우선순위가 높을 수록 배열의 앞부분에 데이터를 위치시킬 수 있습니다. 하지만 st..
간단한 사칙연산 계산기 구현입니다. C, C++을 통해서 계산기를 구현한 코드입니다. 먼저 알아야할 개념은 두가지 입니다. 1. 자료구조 스택 (LIFO) 2. 수의 중위 표기법, 전위 표기법, 후위 표기법 중위 표기법은 1+2*3 과같은 저희가 사용하는 수식입니다. 전위 표기법은 +1*23 후위표기법은 123*+ 입니다. 순서는 "Stack 자료구조 구현 => 중위 표현식을 후위 표현식으로 변경 => 후위 표현식을 계산" 입니다. 스택의 중위 => 후위로 변경할 때 사용하는 자료구조 입니다. 연산자의 우선순위가 높다면 스택에 쌓아두고 그렇지 않다면 현재 스택에서 pop() 을 진행한뒤 쌓아둡니다. 후위 표기법의 계산은 12+3*순일경우 앞에 있는 수 12를 차례대로 끄집어 낸다음 뒤에오는 '+' 연산자..
스콧 마이어스 형님의 Effective c++ 항목1~27까지 읽고 개인적으로 이해한 내용을 키워드를 중심으로 정리한 내용입니다 :) C++의 효과적인 방법 책의 구성 = 일반적인 설계전략 + C++만의 언어적 특징에 관련된 실전 세부사항 설계이슈 > 접근들 > "선택방법" "선택방법" 안목이 올라간다. 항목 1 : C++ 언어들의 연합체로 바라보는 안목은 필수 C++ : Multi Paradugm Progrmming Language (다중 패러다임 프로그래밍 언어) Procedual 기반 -> Obejct Oriented, Functional, Generic, Meta Progr..
Linear Search 보다는 상대적으로 복잡하지만 자료구조의 원소가 "정렬"되어 있을 경우 O(log n)으로 동작하는 이진 탐색을 반복문과 재귀함수로 구현해보도록 하겠습니다. 먼저 이진탐색의 로직은 정렬되어 있는 데이터의 첫번째 부분 first, 데이터의 마지막 원소 last 인덱스를 구한뒤 (first + last) / 2를 통해 mid인덱스를 구합니다. (나머지는 버립니다) 이후 mid인덱스에 들어 있는 값이 찾을려고 하는 값과 같다면 그대로 값을 찾은 것이고 찾을려고 하는 값이 mid인덱스에 들어있는 값보다 작다면 last를 mid - 1로 변경한뒤 first와 last를 다시 합한뒤 2로 나누어 mid를 다시 구해 줄 수 있습니다. 종료 조건은 first가 last보다 클 경우 입니다. fi..
위 처럼 프로젝트를 생성하시면 // 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..