프로그래밍 282

포인터 & 함수 포인터 & 깊은 복사 & 얕은 복사 & 생성자 & 오버로딩 & explicit & 형변환 연산자 & R-value , L-value

포인터 지금까지 변수 선언으로 메모리에 공간을 확보하고, 그곳을 데이터를 넣고 꺼내 쓰는 공간으로 사용했다. 변수명은 그러한 메모리 공간을 식별할 수 있는 이름이었다. 그러나 변수는 선언된 블록({}), 함수 내부로 사용이 제한되어 있다. 같은 변수명을 사용했다 하더라도 블록이나 함수가 다르면 별도의 저장 공간을 확보하므로 전혀 다른 변수로 사용되는 것이다. 그래서 사용 범위를 벗어난 경우도 데이터를 공유할 수 있는 새로운 방법이 포인터 개념이다. 메모리의 주소 메모리라는 것은 우리가 데이터를 넣고 꺼내 쓰는 공간으로, 그 위치를 식별할 수 있어야 한다. 프로그램은 사용하는 메모리의 위치를 주소 값으로 식별할 수 있다. 메모리의 위치를 식별하는 주소 값은 바이트 단우로 구분된다. 이 값은 0부터 시작하고..

우선순위 큐와 힙 (Priority Queue & Heap)

1. 우선순위 큐 1.1 우선순위 큐란? 큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out) 형식의 자료구조이다. 우선순위 큐 (Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다. 우선순위 큐는 일반적으로 힙(Heap)을 이용하여 구현한다. 1.2힙이란? 힙(Heap)은 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조이다. 여러 개의 값 중 최댓값 또는 최솟값을 찾아내는 연산이 빠르다. 힙의 특징 완전이진트리 형태로 이루어져 있다. 부모노드와 서브트리간 대소 관계가 성립된다. (반정렬 상태) 이진탐색트리(BST)와 달리 중복된 값이 허용된다. 힙의 종류 최대 힙(Max Heap) 부..

템플릿의 특수화

암시적 구체화 암시적 구체화를 사용하는 이유는 말 그대로 암시적인 제한성 때문인데, 즉 사용하기를 원하는 데이터형을 나타내는 하나 또는 그 이상의 객체를 선언하기 때문이다. ArrayTP stuff; // 암시적 구체화 컴파일러는 객체가 요구될 때까지 그 클래스의 암시적 구체화를 생성하지 않는다. ArrayTP *pt; // 포인터, 아직 객체가 필요 없다. pt = new ArrayTP ; // 이제 객체가 요구된다. 두 번째 구문은 컴파일러에게 하나의 클래스 정의와, 그 정의에 따라 생성되는 하나의 객체를 생성하라고 지시한다. 명시적 구체화 키워드 template을 사용하여 클래스를 선언하고, 사용하려는 데이터형을 나타냈을 때, 컴파일러는 명시적 구체..

복사 생성자 & 복사 대입 연산자 & explicit & extern

explicit 키워드는 자신이 원하지 않은 형변환이 일어나지 않도록 제한하는 키워드이다. extern 키워드는 전역 변수, 함수 또는 템플릿 선언에 적용할 수 있다. extern 키워드는 컨텍스트(문맥)에 따라 네 가지 의미가 있다. 1. 전역 const 변수가 아닌 선언에서 변수 또는 함수가 다른 변환 단위에 정의되도록 지정한다. 변수가 정의된 파일을 제외한 모든 파일에 extern적용해야 한다. 2. const 변수 선언시, 변수에 extern 링크가 있음을 명시해야한다. 모든 선언된 파일에서 extern 은 반드시 선언되어야한다(Global const 변수는 기본적으로 내부 연결을 가진다.) 3. c언어에서의 extern은 한정자 또는 블록의 여러 함수 선언에 적용될 수 있다. 4. 템플릿 선언 ..

Yaw, Roll, Pitch

Roll : x축 (종축)을 중심으로 회전하는 것. Pich : y축 (횡축)을 중심으로 회전하는 것. Yaw : z축 (수직축)을 중심으로 회전하는 것. 요 피치 롤 정리하기 map 알고리즘 개빨라서 코테에서 진짜 많이 쓴다. list에서 value 값 받아와서 텍스쳐 로드임 map이 배열 인덱스 접근보다 훨씬 빠른 1:1 접근이다 image.GetMetadata -> 이미지의전체픽셀수를 가져와야하면 저걸로 가져올 수있다. image.겟픽셀즈함수로 사운드도 채널로 1:1매칭 연발은 스탑 후 플레이

C++ STL Pair & Map

Pair Pair 란? pair 클래스는 사용자가 지정한 2개의 타입의 데이터를 저장하는 데 사용한다. 서로 연관된 2개의 데이터를 한 쌍으로 묶어서 다룰 때 사용하면 편리하다. 만약 pair 클래스를 사용하지 않고 코드를 짜야 한다면, 서로 연관된 2개의 데이터를 다룰 때, 구조체를 따로 정의해야 한다. 여간 번거로운 일이 아니기에 pair 클래스를 이용함으로써 서로 다른 2개의 연관된 2개의 데이터를 편리하게 관리가 가능하다. Pair의 헤더파일 pair 클래스는 #include 라는 헤더파일에 존재하는 STL이다. 그러나 다음 헤더파일들은 utility 헤더 파일을 포함하는 헤더 파일이다. #include // utility 헤더파일이 포함됨. #include // utility 헤더파일이 포함됨...

C++ STL) deque란?

deque( double ended queue ) 양쪽에서 끝나는 que(큐)를 줄여서 '데크'라고 불린다. stack의 경우엔 최상단에서 삽입, 삭제가 일어나지만, queue같은 경우는 한쪽에서 삽입, 반대쪽에서 삭제가 일어난다. (한쪽 입구에서 삽입, 삭제 중 하의 기능만 가능) deque 의 클래스는 선형 배열로 지정된 형식의 요소를 정렬하고 벡터와 같이 모든 요소에 대한 빠른 임의 액세스를 허용하고 컨테이너 뒷면에서 효율적인 삽입 및 삭제를 허용하는 시퀀스 컨테이너의 클래스 템플릿이다. 이러한 특성은 스택과 큐를 합친 기능으로 모든 입구에서 삽입 삭제가 가능하다. 구조 stack의 경우엔 LIFO(Last In First Out) deck의 경우엔 FIFO(First In First Out) de..

OBB 충돌

OBB 충돌 체크 알고리즘 설명이다. 이 설명은 벡터를 다룬다. 벡터와 벡터의 내적을 모르면 이해하기가 어려울 수 있다. AABB와 OBB는 직사각형 모양의 Bounding Box를 이용해 객체들이 충돌했는지를 판단한다. AABB는 Axis Aligned Bounding Box의 약자로, 축 방향으로 정렬된 경계 경계 상자(Bounding Box)를 뜻한다. 2차원으로 생각했을 때, 모든 변이 x, y 축에 평행한 직사각형을 경계 상자로 정해 충돌 체크를 한다. 반면, OBB는 Oriented Bounding Box의 약자로, 방향성이 있는 경계 상자(Bounding Box)를 뜻합니다. 2차원으로 생각했을 때, 회전이 있는 (회전이 된) 도형을 경계 상자로 정해 충돌 체크를 합니다. (이 글에서는 2차..

CPU와 메모리

CPU 컴퓨터의 두뇌를 담당한다. 다양한 환경에서의 작업을 빠르게 수행하기 위해 ALU의 구조가 복잡하고 명령어 하나로 처리할 수 있는 기능도 많으며 각종 제어 처리를 위한 부분이 많다. GPU 특화된 연산을 빠른 속도로 처리하기 위해 단순한 ALU를 여러 개 갖고 있는 구조로 이루어져 있다. 이 때문에 CPU 단독으로는 아무것도 처리할 수 없으나, GPU를 제어하는 것은 여전히 CPU의 역할이다. GPU는 병렬 연산으로 단순하지만 규모가 큰일에 특화되어있다. 캐시 메모리 캐시(Cache)의 개념 "캐시 되어 있어서 빠른 거야"라는 말을 들어본 적 있을 것이다. 캐시는 잠시 저장해둔다는 의미이고, 기능이다. 캐시 메모리라고 하면 실제 메모리와 CPU 사이에서 빠르게 전달을 위해서 미리 데이터들을 저장해두..

정리 230319

삼각함수란 삼각비 + 호도법 + 함수 이다. 삼각비는 직각삼각형 세 변의 길이의 비는 각에 대한 일정한 관계가 있다. 이러한 일정한 관계를 함수로 나타낸 것이 삼각함수이다. 삼각비에서는 직각삼각형에서 세 변의 길이의 비를 이용했다면 삼각함수에서는 좌표평면 위의 좌표를 이용하는 차이가 있다. 또 삼각비에서는 육십분법으로 나타낸 각을 이용했다면 삼각함수에서는 호도법으로 나타낸 각을 이용한다. 삼각함수의 뜻, 삼각함수의 정의 xy좌표평면에 반지름의 길이가 r인 원을 그리고 원 위의 임의의 점을 P라고 하면 x축 양의 방향을 시초선으로 동경하고 선분OP가 이루는 각을 세타θ라고 할 때, y/r, x/r, y/x는 θ의 크기에 따라 한 가지로 정해진다. r != 0 일 때, θ -> y/r , θ -> x/r ,..