중첩 클래스

class 내부에 class를 선언하는 것이다


보통, 외부 class에 내부 class를 선언하는 경우에 / 내부 class를 private 으로 정의한다.

왜냐하면, 특정 클래스 안에서만 사용하는, 또다른 클래스 자료형이 필요할 경우에 이러한 방식을 사용하기 때문이다.






https://m.blog.naver.com/PostView.nhn?blogId=kks227&logNo=220179773371&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

Posted by ♥03♥



VS 프로젝트 속성 -> 구성속성을 보면

문자 집합으로 2가지를 사용할 수 있다.

1. 멀티바이트 문자 집합

2. 유니코드 문자 집합



아스키 코드 - 모든 문자 하나가 1byte를 차지하며 영어를 표현한다. 

하지만 아스키 문자 코드 만으로는 한글이나 일어 등의 다른 문자를 표시할 수 없다.


멀티바이트 - 1. 아스키 문자 코드에다가 다른문자(2byte)들을 포함한 문자 집합이다.

어떤 문자는 1byte고, 어떤 문자는 2byte이다.

정확히는 모르겠지만, 한 문자가 2byte를 넘는 문자도 존재할 것이다.


2. 멀티바이트 문자 집합은 특정 문자 집합마다의 코드페이지가 존재한다.

예를 들어, 같은 코드 번호 일지라도 한글 코드 페이지로 해석하면 한글이 나오지만,

일어 코드 페이지로 해석하면 일어가 나온다.

그래서 이상하게 깨지는 문자 등을 우리는 목격할 수 있다.




유니코드 - 멀티바이트 2번의 방안으로 탄생한 것이다!

아스키 문자 코드 뿐만 아니라, 한글, 일어 등등 어떠한 문자들을 총 망라하여

각 한 문자에 2byte씩으로 할당하여 만든 문자 집합.

그리하여 각각의 특정 문자는 고유의 유니코드값을 가진다.




코딩 시에는 !! 

게임이 여러 언어를 지원해야할 경우가 있을 시에, 소스 상에서 유연성이 필요하다!!


먼저, 기본적인 습관을 고치도록 하자.


 char

 TCHAR 

 strcat_s( )

 _tcscat_s( )

 strcpy_s( )

 _tcscpy_s( ), _tcsncpy_s( )

 strlen( )

 _tcslen( )

 sprintf_s( )

 _stprintf_s( )


그리고 문자열을 바로 쓸 때,

"" 대신에 TEXT(" ")를 쓰자.


TEXT 매크로는 유니코드의 설정에 따라 상수의 타입을 달리 한다.


예를 들어, 유니코드로 컴파일 할 경우, 

TEST("a")를 16bit(2byte) 문자로 인식하고,

아닐 경우,

8bit(1byte) 아스키 문자로 인식한다.








문자열을 처리하는 기본 자료형은 보통 

char / wchar / TCHAR     사용한다.


아스키코드 char - 영어를 표현하며 모든 문자를 1byte로 구성한다.


유니코드 wchar - 모든 문자를 2byte로 구성한다.

( 영어는 1byte로 되어있으나, 한글을 포함한 다양한 나라의 독특한 언어 표현을 위해 최소 2byte가 필요한데,

멀티바이트를 사용하기도 하지만, 1byte와 2byte로 메모리 관리가 어려워진다.

그래서 사용하는 것이 wchar)


TCHAR - 아스키 타입의 일반 char 또는 유니코드 타입의 wchar 이라는 의미이다.


TCHAR을 사용하면, char인지, wchar인지 구별하지 않고 그냥 코딩할 수 있게 된다.

컴파일러에 유니코드라고 알려주지 않으면 char 로 동작한다.

만약, 나중에 wchar로 사용하려면 컴파일러에 유니코드라고 알려주면 되고, 소스코드는 손대지 않아도 된다.



TCHAR 은 char 인지, wchar 인지 구별하지 않고 코딩할 수 있게끔 해주기 위해 존재한다.


TCHAR 이 어떤건지에 대한 구별은 유니코드라는 precompile 상수를 이용해서 구분하며,

이는 프로젝트 -> 셋팅 에서 _DEBUG 등등이 선언되어 있는 곳 끝에 선언해주면 

TCHAR 은 wchar 로 변환해서 컴파일을 시도한다.



글로벌한 제품 개발을 위해서는 TCHAR 사용이 필수인듯 하다.



// 03 개인

cf.  아스키 문자열은 올바른 UTF-8 문자열이다.

즉, UTF-8 은... 아스키 코드를 의미한다! 

ex. std::string





https://blog.naver.com/wondo21c/30043174174

http://klkl0.tistory.com/87

위키백과





Posted by ♥03♥



< 해쉬 테이블 > 

검색속도가 매우 빠르나, 메모리를 굉장히 소모한다.



1. 해쉬 : 자료를 입력할 때부터 검색하기 쉬운 위치에 삽입하는 방법

( 검색 방법이 아니라, 자료가 저장되는 전체 저장소이다. )


2. 해쉬 테이블 : 자료가 저장되는 전체 저장소 ( 구현에 따라 배열/동적배열/연결리스트 )


3. 해쉬 함수 : 데이터가 새로 입력될 때, 이 데이터를 어떤 위치(ex. index)에 넣을지 결정하는 연산을 해주는 함수


4. 해싱의 궁극적인 문제점 : 위치가 겹치는 충돌이 발생할 수 있다.


ex) 해쉬 테이블이 배열이라고 할 때, key 값이 정수 int형이고, 해쉬 함수 내부 처리가 key % 10 (나머지연산) 이라고 하면

배열의 크기가 10 일때, key 값 중 1, 11, 21, 31 은 모두 같은 위치 index == 1 을 가리키게 된다.



5. 해싱 문제점의 해결법


① 다중 슬롯 

배열의 크기를 충분히 크게 잡는다. 충돌이 발생하면 관련 배열의 다음 슬롯으로 데이터를 저장한다. ▶ 2차원 배열 사용

또한 해시 함수도 다중 슬롯을 지원하도록 수정해야한다.

▷슬롯 크기를 초과하는 데이터가 입력될 때만 문제가 발생한다.


② 정교한 해쉬 함수

해쉬 함수의 내부 처리를 더욱 정교하게 하는 방식이다.

ex) return num%10 → return ( num%10 ) % 10


③ 선형 탐색

충돌이 생긴 경우, 데이터를 버리지 않고 다른 index에 대신 넣는 방법 (단, 해쉬 함수가 검색하여 찾을 수 있는 위치로)

cf. 산술적 연산을 사용한다 


④ 재해시

선형 탐색과 비슷하나, 산술적 연산이 아니라, 대체 칸을 찾는 해쉬 함수를 별도로 더 구현하는 방식이다.


⑤ 동적 슬롯

슬롯의 갯수를 가변적으로 관리하는 방법.

cf. 선형탐색과 재해시가 충돌을 회피하는 해결방법이라면, 동적 슬롯은 충돌에 적극적 대처하는 방식이다.

동적으로 처리되어야하므로 가변 배열 vector 또는 list를 사용하여 구현한다.






hash_map 추후 추가....




출처

http://soen.kr/lecture/ccpp/cpp2/20-1-3.htm

http://jtoday.tistory.com/73








'자료구조 · 알고리즘' 카테고리의 다른 글

해쉬테이블( hash table) 간략 정리  (0) 2018.01.04
중위 표기법 / 후위 표기법 이해  (0) 2015.04.16
하노이 타워  (0) 2015.04.14
Posted by ♥03♥