■ MFC가 제공하는 List Class - CStringList
※ MFC 가 제공하는 List Class
- 양방향 포인터를 가지는 이중 연결 리스트(Doubly-Linked List)
- 리스트의 처음 부분을 가리키는 포인터(Head) 와 끝 부분을 가리키는 포인터(Tail)가 있다.
따라서 어느 방향으로든 순환하는 것이 가능하다.
MFC가 제공하는 List Class
① 템플릿 클래스 (Template Class)
② 비 템플릿 클래스 (Nontemplate Class)
① 템플릿 클래스 (Template Class)
- afxtempl.h 헤더파일 필요.
- 원하는 종류의 데이터 타입을 프로그래머가 결정
- 비 템플릿 클래스가 제공하는 모든 기능을 구현할 수 있기 때문에 템플릿 클래스 사용을 권장.
클래스 이름 | 데이터 타입 | 사용 예 |
CList | 프로그래머가 결정 | CList<CPoint, CPoint &> list; |
② 비 템플릿 클래스 (Nontemplate Class)
- afxcoll.h 헤더 파일이 필요.
- 자주 사용하는 데이터 타입을 곧바로 사용할 수 있다.
클래스 이름 | 데이터 타입 | 사용 예 |
CObList | CObject 포인터 | CObList list; |
CPtrList | void 포인터 | CPtrList list; |
CStringList | CString | CStringList list; |
CObList, CPtrList, CStringList 는 제공하는 멤버 함수의 이름과 사용법이 동일 하므로 하나의 클래스만 배워두면
다른 모든 클래스에도 동일하게 적용할 수 있다.
- 멤버 함수
CStringList : CStringList 객체 생성.
GetHead : 리스트의 헤드 값을 돌려준다.
GetTail : 리스트이 테일 값을 돌려준다.
RemoveHead : 리스트 헤드 값을 제거.
RemoveTail : 리스트 테일 값을 제거.
RemoveAll : 리스트의 모든 원소를 제거
AddHead : 한 원소(또는 다른 리스트의 모든 원소들)을 리스트의 헤드에 붙인다.(새로운 헤드를 만는다는 뜻.)
AddTail : 한 원소(또는 다른 리스트의 모든 원소들)을 리스트의 테일에 붙인다.(새로운 헤드를 만는다는 뜻)
GetHeadPosition : 리스트의 헤드 원소 위치를 반환.
GetTailPosition : 리스트의 테일 원소 위치를 반환.
GetNext : 반복할 때 다음 원소를 얻는다
GetPrev : 반복할 때 이전 원소를 얻는다.
GetAt : 주어진 위치에서 원소를 얻는다
SetAt : 주어진 위치에서 원소를 넣는다.
RemoveAt : 리스트에서 특정한 위치에 있는 원소를 제거.
InsertBefore : 주어진 위치 이전에 새 원소를 삽입.
InsertAfter : 주어진 위치 이후에 새 원소를 삽입.
Find : 포인터 값에 의해 지정된 원소의 위치를 얻는다.
FindIndex : 0부터 시작하는 인덱스를 기준으로 원소의 위치를 얻는다.
Getcount : 리스트에서 총 원소의 개수를 구한다.
IsEmpty : 비어 있는 리스트인지 테스트한다.
1. CStringList 사용 예
- 리스트의 생성과 초기화
char *szFruits[] = { |
- 리스트 순환
POSITION pos = list.GetHeadPosition();
while(pos != NULL){
CString string = list.GetNext(pos);
cout << (LPCTSTR)string << endl;
}
cout << endl;
// 리스트 제일 뒤에서 출발하여 순환한다.
pos = list.GetTailPosition();
while(pos != NULL){
CString string = list.GetPrev(pos);
cout << (LPCTSTR)string << endl;
}
※ POSITION 타입의 변수은 pos는 GetNext(), GetPrev() 함수를 호출할 때마다 값이 바뀐다.
- 리스트 항목 삽입과 삭제
pos = list.Find("포도");
list.InsertBefore(pos, "살구");
list.InsertAfter(pos, "바나나");
list.RemoveAt (pos);
// 항목 삽입과 삭제 후 결과를 확인한다.
pos = list.GetHeadPosition();
while(pos != NULL){
CString string = list.GetNext(pos);
cout << (LPCTSTR)string << endl;
}
출처: http://six605.tistory.com/169
반응형
'IT-개발,DB' 카테고리의 다른 글
[개발/MFC] 탭브라우저에서 ActiveX가 포함된 웹페이지 핸들 찾기 (0) | 2011.08.10 |
---|---|
[개발/MFC] 자신의 파일경로 얻기, 자신의 경로 얻기 (0) | 2011.08.08 |
[개발/MFC] 프로세스가 살아있는지 검사, 프로세스 죽이기 (0) | 2011.08.01 |
[개발/MFC] 동적으로 COM Server 등록하기 (DLL, OCX) (0) | 2011.08.01 |
[개발/MFC] 바탕화면 바꾸기 (0) | 2011.08.01 |
댓글