컴퓨터 공부/MFC 프로그래밍

[5월 22일 1교시] MFC Collection Class

려리군 2009. 5. 22. 09:46

MFC Collection Class

- 동적인 할당이 가능. 

배열 : 고정된 크기, fixed, CArray, 템플릿 인자 2개

리스트 : 동적인 크기, dynamic, CList, 템플릿 인자 2개

 - 시작은 head, 끝은 tail, single linked list, double linked list.

map : hash, dictionary, CMap, 템플릿 인자 4개


template : 클래스명<타입> 형태로 사용.

예) CArray<CString, &CString> = CStringArray


CObList : CObject들에 대한 리스트

CPtrList : void 포인터에 대한 리스트


C***List 관련 멤버 함수들


POSITION AddHead(CObject* newElement);

void AddHead(CObList* pNewList);

새로운 element나 새로운 element들의 list들을 현재 list 처음(머리)에 추가한다.

참고주소 : http://msdn.microsoft.com/en-us/library/xt4h9bcy.aspx

리턴 : (첫번째 형태)새롭게 추가된 element의 POSITION 값.

newElement : 현재(this) 리스트에 추가될 CObject 포인터

pNewList : 다른 CObject list에 대한 포인터. pNewList의 element들은 현재(this) 리스트에 추가될 것이다.

POSITION AddTail(CObject* newElement);

void AddTail(CObList* pNewList);

새로운 element나 새로운 element들의 list들을 현재 list 끝(꼬리)에 추가한다.


CObject* RemoveHead();

리스트의 처음(머리)부분에서 element를 때어내서 그 포인터를 리턴한다.

참고주소 : http://msdn.microsoft.com/en-us/library/fxh91dxe.aspx

리턴 : 이전 리스트의 처음 부분의 CObject 포인터

CObject* RemoveTail();

리스트의 끝(꼬리)부분에서 element를 때어내서 그 포인터를 리턴한다.

참고주소 : http://msdn.microsoft.com/en-us/library/dwk4watk.aspx

리턴 : 현재 리스트의 끝 부분이었던 CObject 포인터


POSITION InsertAfter(POSITION position, CObject* newElement);

지정한 위치 element 뒤에 하나의 element를 현재 리스트로 추가한다.

참고주소 : http://msdn.microsoft.com/en-us/library/2fyts00d.aspx

리턴 : position값과 똑같은 값을 가진 POSITION값

position : 이전 GetNext, GetPrev, Find 멤버 함수 호출에 의해 리턴된 POSITION값

newElement : 현재 리스트로 추가될 Cobject 포인터

POSITION InsertBefore(POSITION position, CObject* newElement);

지정한 위치 element 앞에 하나의 element를 현재 리스트에 추가한다.

참고주소 : http://msdn.microsoft.com/en-us/library/h28xk22y.aspx


POSITION GetHeadPosition( ) const;

현재 리스트의 처음(머리) element의 위치를 얻는다.

참고주소 : http://msdn.microsoft.com/en-us/library/c62790bz.aspx

리턴 : 순회나 CObject 포인터를 얻는데 사용될 수 있는 POSITION값

POSITION GetTailPosition( ) const;

현재 리스트의 끝(꼬리) element의 위치를 얻는다.

참고주소 : http://msdn.microsoft.com/en-us/library/b7tsb28a.aspx

리턴 : 순회나 CObject 포인터를 얻는데 사용될 수 있는 POSITION값


CObject*& GetNext(POSITION& rPosition);

const CObject* GetNext(POSITION& rPosition) const;

rPosition으로 확인된 리스트 element를 얻고 이 리스트의 다음 목록의 POSITION 값으로 rPosition을 설정한다.

참고주소 : http://msdn.microsoft.com/en-us/library/w231818s.aspx

리턴 : rPosition 위치의 CObject 객체를 얻는다. const일 경우 수정으로부터 보호되지만 const가 없을 경우 리스트는 수정될 수 있다.

CObject*& GetPrev(POSITION& rPosition);

const CObject* GetPrev(POSITION& rPosition) const;

rPosition으로 확인된 리스트 element를 얻고 이 리스트의 이전 목록의 POSITION 값으로 rPosition을 설정한다.

참고주소 : http://msdn.microsoft.com/en-us/library/597w29w2.aspx

리턴 : rPosition 위치의 CObject 객체를 얻는다. const일 경우 수정으로부터 보호되지만 const가 없을 경우 리스트는 수정될 수 있다.


CObject*& GetAt(POSITION position);

const CObject*& GetAt(POSITION position) const;

POSITION에 해당하는 CObject를 얻는다.

참고주소 : http://msdn.microsoft.com/en-us/library/y66y9ccz.aspx

리턴 : rPosition 위치의 CObject 객체를 얻는다. const일 경우 수정으로부터 보호되지만 const가 없을 경우 리스트는 수정될 수 있다.


※ 객체를 Remove한다고 해서 지워지는 것이 아니고 리스트에서만 없어지는 것이다. 그러므로 나중에 해당 객체를 지워주어야(deallocate) 한다.

※ Get계열 멤버 함수는 객체를 읽어올 때 사용

※ Remove계열 멤버 함수는 객체를 지울 때 사용