728x90

Programming Language/C,C++ 52

C++] RTTI(Run-Time Type Information)

RTTI(Run-Time Type Information)실행 중 객체의 타입과 관련된 정보를 알아내는 기법실행 중 포인터가 가리키는 객체의 실제 타입을 알아야 하는 경우,클래스가 상속 관계에 있을 때 포인터가 가리키는 객체가 파생클래스의 객체인지기본클래스의 객체인지 판단해야 하는 경우, RTTI 기법을 이용해 알아낼 수 있다.RTTI 활용을 위해서는 typeinfo 헤더를 포함시켜야 함. type_info 클래스는 typeid 연산자에 의해 반환되는 정보로,타입 이름과 같은 타입에 관한 정보를 가진 클래스임 123456789class type_info{public: bool operator==(const type_info& rhs); bool operator!=(const type_info& rhs); ..

C,C++] cin/cout, scanf/printf

알고리즘 문제를 풀다 보면, Time Limit(시간 제한)에 대해서 신경 쓰지 않을 수가 없다.제한된 메모리에서 최대한 빠른 시간 내에 정확한 답을 찾는 것이 좋은 알고리즘이고,그렇지 못한 알고리즘은 TLE나 시간 초과 등을 이유로 답을 처리해주지 않는다. 입출력이 수천 번에 머무르면 시간 초과가 발생하면거의 대부분 알고리즘에 문제가 있지만,입출력이 수십만 개, 수백만 번에 이르면 이야기가 좀 다르다. 한 예를 들어서 설명을 해볼까 한다. https://www.acmicpc.net/problem/11004 백준 사이트의 11004번 : K번째 수라는 문제다.N개의 숫자들을 입력 받고 오름차순 정렬을 했을 때,K번째의 수를 출력하는 것이다. 문제는 되게 간단하다.입력 값이 5백만개에 이르며 숫자 중복도 ..

C++] vector를 구조체 내 변수 기준으로 정렬하기

C++로 알고리즘 문제를 풀거나 이런 저런 이유로 코딩을 하다 보면 vector를 사용하게 되고 이 vector 내에 들어가는 값들을 정렬하기 위해서 직접 정렬을 구현해주는 방법도 있지만 좀 더 최적화되어 빠른 속도로 정렬을 수행해주는 sort함수를 사용하게 된다. 요소의 상대적 위치가 바뀌지 않는 걸 원한다면, stable_sort를 사용하면 된다. 통상적으로 자료형이 하나(예를 들어 int 하나)만 들어가는 vector라면, 시작점과 끝만 정해주면 알아서 오름차순 정렬을 수행해버리기 때문에 문제가 되지 않지만, vector 배열에 들어가는 정보가 여러 가지 자료형이 섞여 있는 구조체이고 그 구조체 안의 변수를 기준으로 정렬을 수행해야 한다면, 갑자기 머리가 아파온다. 대부분 레퍼런스를 참고하지 않거나..

C++] Vector를 이용한 이중 배열

C++] Vector를 이용한 이중 배열 동적 할당에 대해서 익숙해지면배열을 정적으로 할당하는 경우가 줄어들게 되고거의 대부분 동적으로 할당하게 된다.그렇지 않은 사람들도 있겠지만,나는 변수 사이즈에 따라 배열 크기가 바뀌는 경우 반드시 동적할당을 통해서배열의 크기를 결정 짓는다. 그러다가 STL의 vector라는 걸 알게 되면,동적 할당도 잘 사용하지 않게 된다.구조체가 필요하고 안에 들어가는 변수 관리가 까다로운 경우가 아니면,거의 대부분의 경우 vector를 사용하게 된다.물론, vector에 임의의 구조체를 넣지 못하는 건 아니고그건 순전히 사용하는 나의 숙련도 문제에서 기인한 것이라고 생각된다. Topcoder나 비정기적 혹은 정기적으로 개최되는 코딩 대회에 참가하거나,그곳에서 나온 문제들을 풀..

API] SetWindowsHookExA 함수

SetWindowsHookExA function 123456HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId);cs user32.dll에 있는 해당 함수를 통해 훅을 설정할 수 있음.대표적인 함수로, MSDN에서 해당 함수의 구조와 사용법에 대해서 알 수 있음. 첫번째 인자, 훅 타입으로 어떤 종류의 메세지를 후킹할 것인지 선택하는 것두번째 인자, Hook Procedure세번째 인자, 후킹할 스레드가 속해 있는 DLL의 핸들네번째 인자, 후킹할 스레드 아이디 첫번째 인자에 들어갈 훅 타입은 구글링으로 체크 가능두번째 인자로 사용할 훅 프로시저, 파이썬의 경..

C, C++] 함수를 인자값으로 활용하기

함수를 인자값으로 활용하여전달된 함수에 따라 내림차순과 오름차순 정렬을 시행하게 하는 프로그램어지간한 과제는 그냥 무난하게 했는데 이번 건 보고 조금 당황.함수를 인자값으로 쓰는 일이 드물다 보니까, 처음에 보고 좀 난해했음.사용된 정렬은 삽입정렬(Insertion Sort) 1234567891011121314151617181920212223242526272829303132#include #include #define TRUE 1#define FALSE 0 typedef int element; int ascend(element x, element y){ if (x y) return FALSE; return TRUE;}void InsertionSort(element list[], int n, int (*f..

C,C++] Strlen와 동일한 기능을 하는 함수 구현

사실 함수 구현이라고 적어두긴 했으나,strlen과 비슷한 함수를 작성한 것 뿐이며,포인터를 이용하거나 하지 않았기 때문에,사용자가 정의한 함수라고 보기도 어렵다.그저 이러이러한 논리로 strlen과 비슷할 것이다가 전부일 뿐이므로, 오해는 금물이다.이 소스를 int str_len(char *s)와 같은 함수를 이용하여 strlen함수와 유사하게 만들 수 있다. 12345678910111213141516#include #include using namespace std; int main(){ char str[40] = "Make String Library Function"; int func, i = 0; func = strlen(str); while (str[i] != 0) i++; cout

C,C++] 콘솔에서 색상 및 커서 제어

커서를 제어하고 콘솔 색깔을 지정하는 함수basiclib.CPP1234567891011121314151617181920212223242526272829#include #include // 화면의 커서를 보이거나 숨기기void CursorView(char show){ HANDLE hConsole; CONSOLE_CURSOR_INFO ConsoleCursor; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); ConsoleCursor.bVisible = show; ConsoleCursor.dwSize = 1; SetConsoleCursorInfo(hConsole, &ConsoleCursor);} // x, y 좌표로 커서를 움직이는 함수void gotoxy(int x, int y..

728x90