본문 바로가기

C++24

[C++] multiset 헤더파일 : 장점 단점 많은 데이터를 저장한다. 검색 속도가 빠르다. 중복을 포함해 자동 정렬된다. Key == Value 적은 양의 자료를 사용할 경우 오버헤드로 인한 손해 발생 기본 : 오름차순 multiset로 내림차순으로 생성, 사용 가능 주의점 다른 자료구조와는 다르게 iterator에서 + 연산자를 지원하지 않는다. multimap m; for(int i = 0; i < 10; i ++) { m.insert(i); } auto iter = m.begin() + 1; // X 사용불가능 컴파일오류 iter = ++m.begin(); // O 사용가능 ++, -- 연산자는 정상 작동하기 때문에 m.begin() + 2의 위치를 참조하기 위해선 auto iter = ++m.begin(); iter+.. 2022. 11. 24.
[C++] 비트 연산, 비트맵마스크 비트맵 마스크 정수의 이진수 표현을 자료 구조로 쓰는 기법 장점 수행시간 빠르다. 코드가 짧다. 메모리 사용량이 적다. char : 1byte true, false 표현하기 위해 1bit만 쓰고 있음 char의 8bit를 비트맵 마스크를 이용해서 사용하면 char 하나로 char c[8]; 의 사용 효과를 누릴 수 있다. 유니티에서는 레이어간 충돌 여부 등을 설정할 때 이러한 비트맵 마스크 사용함 설명을 위해 간단하게 4bit를 가지고 그림을 그렸음 0번 콜라이더 / 2번 콜라이더 충돌 처리를 한다. 1번 콜라이더 / 2번 콜라이더 충돌 처리를 한다. 2번 콜라이더 / 3번 콜라이더 충돌 처리를 한다. 3번 콜라이더 / 3번 콜라이더 충돌 처리를 한다. 위 처럼 나타내면 (0,2) (2,0)과 같은 동일.. 2022. 11. 20.
[C++] 벡터 중복 제거 벡터의 중복 제거를 위해선 sort(), unique(), erase()를 적절히 사용하면 중복원소를 제거 할 수 있다.. #include #include #include using namespace std; int main() { vector s; s.emplace_back(2); s.emplace_back(2); s.emplace_back(3); s.emplace_back(1); s.emplace_back(2); s.emplace_back(1); for(auto i : s) { cout 2022. 11. 19.
[WinAPI] 키 입력 관리 게임 로직의 GetAsyncKeyState()의 문제점 동일 프레임에서 먼저 실생하는 로직에서 입력을 받아 true가 나오고 뒷부분의 처리엔 키를 누르지 않아 false가 나오는 등의 동기화 문제가 생길 수 있다. KeyDown, KeyHold, KeyUp을 판단하려면 추가적인 코드를 써야 판단이 가능하고 키 입력 판단 할 때마다 코드를 적어야 하니까 불편함 비동기적으로 처리되어 윈도우가 포커싱되어 있지 않아도 동작한다. (최소화 상태에서도 동작함) KeyManager를 따로 생성하여 관리하여 위의 문제점들을 해결한다. KeyManager에서 키 입력을 판단하고 그 값을 통해 동작하도록 한다. 키값에 해당하는 배열을 매칭해서 Down, Hold, UP 쉽게 판단 가능 포커싱 x 상태의 경우도 일괄로 처리.. 2022. 11. 15.
[WinAPI] DC, BITMAP, 더블버퍼링 더블버퍼링 싱글 버퍼링으로 화면을 그릴 경우 화면을 다 그리기 전까진 다음 그림을 그릴 수 없기 때문에 깜빡이는 문제점 이 발생합니다. 이 문제는 (화면출력 -> 초기화 -> 화면출력)를 반복하며 초기화 부분에 순간을 포착해서 생김 위에서 발생하는 깜빡임 문제를 해결하기 위해 사용되는 기법 버퍼 2개로 렌더링 처리를 하는 것 입니다. 한쪽은 보여주고 한쪽은 화면을 그리고 화면을 다 그렸다면 보여주고 반대편은 다시 그리고 이 동작을 반복한다면 깜박임 문제를 해결할 수 있습니다. DC 출력에 필요한 모든 정보를 가지는 구조체, 모든 출력함수는 DC를 참조하여 출력한다. 출력을 하기 위해 DC를 사용해야한다. HDC hdc = GetDC(hwnd); GetDC()로 DC 받아오고 ReleaseDC(hwnd, .. 2022. 11. 15.
[WinAPI] 윈도우 크기 지정 클라이언트 영역 실제 컨텐츠가 동작하는 범위를 가리킨다. SetWindowPos() HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags 위의 매개변수를 가지고 있으며 보통 SetWindowPos()를 이용해서 윈도우의 위치와 화면의 크기를 변환시킨다. cx, cy값으로 1280, 720을 줬을 경우 비 클라이언트 영역의 크기까지 합쳐서 크기를 변환시킨다. AdjustWindowRect() LPRECT lpRect, DWORD dwStyle, BOOL bMenu 위의 매개변수를 가지며 AdjustWindowRect()를 호출하면 첫번째 매개변수로 주어진 화면의 크기만큼 클라이언트 영역이 될 수 있는 크기를 받아 올 수 있다... 2022. 11. 15.