본문 바로가기

old_Coding/C/C++

[effective C++] 7장. 템플릿과 일반화 프로그래밍-41, 42 템플릿. 학생 때나 회사 다닐 때나 참 요물입니다, 이 녀석. 창피한 얘기지만 아직도 잘 모르겠어요. 그래서 공부할 겸, 정보 공유도 할 겸 포스팅으로 스터디 자료를 대체합니다. 항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성 부터.. 이게 도대체 뭔 소리냐.. 뭐 컨셉 자체는 심플합니다. 클래스와 비교를 하는 것이 이해가 빠를테니 클래스를 먼저 보지요. class Widget { public: Widget(); virtual ~Widget(); virtual std::size_t size() const ; virtual void normalize() ; void swap(Widget& other) ; // .. skip }; 예시를 보면, Widget 이라는 클래스는 일.. 더보기
[C/C++] 문자열 다루기(1) - 초기화 C/C++로 작업을 하면서 가장 신경 쓰이는 부분 중 하나가 아마문자열과 문자를 다룰 때 같습니다. NULL 포인터면 포인터가 죽고,작은 실수로 인하여 자칫 잘못하면 strcpy나strlen 등 문자열 함수를 부르면 죽어버리는 경우가 흔하죠. 특히나 C/C++을 이제 막 시작하신 분들이나 자칫 잘못 이해하고 계신 분들은 이런 함수들을 부르기가 꺼려지실꺼라고생각됩니다.(그 중에 한명이 저구요.) 그래서 정리하는 겸, 정리 한번 하고 넘어가려고 합니다. 환경: O.S - Windows 7 Tool - Visual Studio 2008 + sp1. Type - Win32 Console Project (대부분의 경우, 글로벌변수로 char형 배열 인스턴스를 잡고, 함수내에서는 char* 로 조작하도록 하였습니다.. 더보기
[STL::Map] Error occured(*) #include #include int main() { std::map mapTest ; for (int i = 0 ; i 더보기
[C] File I/O #include #include #include // 형식 : 이영득_2주차_파일예제.zip const int MAX_FILENAME_SIZE = 20 ; const int MAX_BUFFER_SIZE = 256 ; int main(void) { TCHAR FileName[MAX_FILENAME_SIZE] ; TCHAR InputBuffer[MAX_BUFFER_SIZE] ; ::ZeroMemory(FileName, MAX_FILENAME_SIZE* sizeof(TCHAR) ) ; ::ZeroMemory(InputBuffer, MAX_BUFFER_SIZE* sizeof(TCHAR) ) ; std::cout 더보기
[Scrap] Struct SYSTEM_INFO (*) It's from MSDN, and here is the link: http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx SYSTEM_INFO Structure Contains information about the current computer system. This includes the architecture and type of the processor, the number of processors in the system, the page size, and other such information. Syntax C++ typedef struct _SYSTEM_INFO { union { DWORD dwOemId; struct { WORD wP.. 더보기
[C++] Function Pointer(3) (Solution) It's my solution file compressed by zip. * With finishing * Maybe, it would be last about the test code of the function pointer. Later, I'm not sure whether I'm going to write about the function pointer in my server model (because there are so many extra-informations to explain). - ps. This blog is for my English abilities, and I'm not good at communicating in English. If you see grammatic, synt.. 더보기
[C++] Function Pointer(2) (in class & with STL) * Introduction * Here is my second experience. I've often used class in C++, and I finally made it. * Function Pointer in class (code & result)*#include class cTemp1 { private : int m_X ; int m_Y ; void (cTemp1::*m_PtrF1)(void) ; int (cTemp1::*m_PtrF2)(int _x, int _y ) ; public: cTemp1(void); ~cTemp1(void); void Func1(void) ; int Func2(int _x, int _y) ; void Run() ; }; cTemp1::cTemp1(void) : m_X.. 더보기
[C++] Function Pointer(1) (Global function & using array) * Introduction * - A week ago, to parse network packets I used to do 'if' for all case. During optimizations, I turned from 'if' to 'function pointer with map'. I'm going to write about the function pointer as known as possible. * Basic usage (code) * #include void Function1() ; int Function2(int _x, int _y) ; int main() { /////////////////////////////////////////////////////////////////////////.. 더보기
[C++] '\0' & '\n' With testing length of characters, I discovered very harm misunderstanding. I usually wrote '\n' to mean 'NULL', but it's terribly wrong. Here is my source code. * Code * #include #include #include int main() { char* Str1 = "Count." ; char* Str2 = "Count.\0" ; char* Str3 = "Count.\n" ; wchar_t* wStr1 = L"Count." ; wchar_t* wStr2 = L"Count.\0" ; wchar_t* wStr3 = L"Count.\n" ; std::cout 더보기
[Scrap] length of characters (I/O Function) (*) strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l prototype size_t strlen( const char *str ); size_t strlen_l( const char *str, _locale_t locale ); size_t wcslen( const wchar_t *str ); size_t wcslen_l( const wchar_t *str, _locale_t locale ); size_t _mbslen( const unsigned char *str ); size_t _mbslen_l( const unsigned char *str, _locale_t locale ); size_t _mbstrlen( c.. 더보기
[C++] Queue Linked List 작성 이번엔 큐입니다. Stack에서는 맨 앞에있는 Top만 참조했었습니다. Queue의 개념은 이렇습니다. 가장 먼저들어온 녀석을 가장 먼저 처리해주는겁니다. 예로 매표소에 줄서있는 모습을 상상하시면 되는데요. A부터 순서대로 G까지 줄을 섰다고 가정하면 A B C D E F G 순으로 줄을 섰겠죠? 여기서 Queue자료형에서는 A를 가장 먼저 처리해줍니다. 먼저 줄선 사람들을 먼저처리해줘야 공평하겠죠?? 가장 먼저 들어온 A를 처리하면 B C D E F G 가 되겠네요 Queue에서는 빠른 처리를 위해 Front와 Rear 두개의 포인터변수를 둡니다. 앞쪽을 처리한다고하고(처리후 삭제) 뒷쪽에 새로운 데이터들이 줄을 선다고했을때 매번 List처럼 포인터를 끝까지 옮겨가면 시간적으로 비효율적이겠죠. 자료들이.. 더보기
[C++] STACK Linked List 작성 이번엔 Stack입니다. Stack이란, 리스트의 한가지 특수구조로 봐도 될것같은데요. 위로 쌓이는 물건들이라고 생각하면 쉽습니다. 맨처음 놓인 물건이 A 라고 하고 순서대로 G까지 쌓는다면, A B C D E F G 가 되겠죠? 맨 처음 들어온건 A이고 맨 나중에 들어온건 G입니다. 자, 여기서 제가 이것들을 옮기려고 합니다. 바닥에서부터 위로 쌓았다면 가장먼저 손이 가는것은?? G겠죠. 바닥위에 있는 A를 만지려면 위에있는 G F E D C B 를 모두 치워야 합니다. 이런 개념인데요. 맨 나중에 들어온것을 가장 먼저 처리하는 방식입니다. List라는것은 임의의 장소에 들어가도 무관합니다. 그러나, Stack은 임의의 장소가 아니라 Top(List에서 Head)만을 접근하는 방식입니다. List에서 .. 더보기
[C++/자료구조] Simple Linked List 작성 단순연결리스트라고 불리우는 자료형을 클래스로 작성해봤습니다. 선언부만 옮겨서 객체사용법만 설명드리고 자세한건 직접 다운받아 돌려보세요~ 작성된 환경은 비쥬얼스튜디오 2008입니다. 자 그럼 "list.h" 헤더파일을 옮겼습니다. typedef struct node { int Data ; struct node* Next ; } Node ; // 노드 구조체 정의 인트형의 데이터와 구조체로 정의되어 있는 노드를 가르키는 포인터변수 Next가 정의되어있습니다. 정수형변수 한개와 어떤 노드를 지정할 포인터변수 한개가 구조체로 묶여있네요. typedef Node* Nptr ; // 노드 포인터타입 정의 그리고 위의 구조체를 가르키는 포인터를 앞으로 Nptr이라고 하겠습니다. 소스코드에 별(*)이 덕지덕지 붙으면 .. 더보기
[자료구조] 생쥐의 미로 찾기 (우선법 알고리즘) 책을보다가 흥미로운 문제가 주어져서 직접 구현해봤습니다. 실행파일이 제대로 돌아갈지 모르겠네요 코딩된 환경은 비쥬얼 스튜디오 2008입니다. 이 글을 보실때에 기본적으로 링크드리스트(Linked List)에 대해 이해가 있어야할것 같습니다. C언어 상태로 짰습니다.. 책에서 우선법을 봤는데.. 우선법은 어떤 미로든지 오른손을 벽에 대고 가다보면 언젠간 도착지에 도달할수 있다라는 개념입니다. 서울대 학생분들이 이 알고리즘을 썼다고 합니다. 대단합니다~ 미로를 빠져나간 경로를 알고있다면 우선법으로 갔던길의 최단거리를 도출할수 있습니다. 좌표가 같은 구간(즉, 들어갔다가 다시 제자리로 나온) 사이 경로를 모두 삭제하는겁니다. A B C B F E 이런식이라면.. B와 C를 삭제하는겁니다.. 안으로 들어갈 필요.. 더보기