[리스트 클래스] p.351~
클래스 |
데이터 형식 |
CstringList |
CString |
CptrList |
void * |
CObList |
CObject * |
→ CString 형과 같이 직접 지원되는 경우는 CStrinList에 저장하고, 그렇지 않으면 CptrList 클래스에 저장하면 된다.
함수 |
기능 |
GetCount |
리스트에 저장된 항목의 개수를 반환 |
IsEmpty |
리스트에 저장된 항목이 없으면 TRUE 반환 |
GetHead |
첫 노드의 값을 반환 |
GetTail |
마지막 노드의 값을 반환 |
GetHeadPosition |
첫 노드의 포인터를 반환 |
GetTailPosition |
마지막 노드의 포인터를 반환 |
GetAt |
주어진 포인터가 가리키는 값을 반환 |
GetNext |
주어진 포인터가 가리키는 값을 반환하고, 포인터는 다음 노드를 가리키도록 한다. |
GetPrev |
주어진 포인터가 가리키는 값을 반환하고, 포인터는 이전 노드를 가리키도록 한다. |
SetAt |
주어진 포인터가 가리키는 값을 설정 |
AddHead |
첫 노드 앞에 새로운 노드를 추가 |
AddTail |
마지막 노드 뒤에 새로운 노드를 추가 |
InsertAfter |
주어진 포인터가 가리키는 노드 뒤에 새로운 노드를 추가 |
InsertBefore |
주어진 포인터가 가리키는 노드 앞에 새로운 노드를 추가 |
RemoveHead |
첫 노드를 삭제 |
RemoveTail |
마지막 노드를 삭제 |
RemoveAt |
주어진 포인터가 가리키는 노드를 삭제 |
RemoveAll |
모든 노드를 삭제 |
Find |
주어진 값을 갖는 노드를 찾아 그 노드의 포인터를 반환 |
FindIndex |
주어진 인덱스를 갖는 노드를 찾아 그 노드의 포인터를 반환 |
예제 소스)
Cstring strData[] = {_T(“SUN”), _T(“MON”), _T(“TUE”), _T(“WED”), _T(“THU”), _T(“FRI”), _T(“SAT”) };
void main()
{
Cstring data;
CstringList list;
POSITION pos;
for(int i=0; i<7; i++)
{
list.AddTail(strData[i]);
}
//AddTail 함수를 호출하여 리스트의 맨 마지막에 노드를 하나씩 추가!!
//AddHead 함수를 호출하게 되면, 순서가 바뀌게 된다!!
data = list.GetHead();
cout<<”Head: “<<data <<endl;
data = list.GetTail();
cout<<”Tail:” <<data <<endl;
//값은 각각 SUN과 SAT이 출력된다.
pos = list.GetHeadPosition();
while(pos)
{
data = list.GetNext(pos);
cout<<data<<endl;
}
// 전체 데이터를 차례로 보여준다.
// GetHeadPosition 함수는 맨 앞 노드의 포인터를 반환한다. 이 함수의 반환 값은 // POSITION이라는 타입의 변수로 받는데, 이것은 일종의 포인터 변수이다.
// 이 변수를 GetNex함수의 매개변수로 넘겨주면, 그 포인터가 가리키는 노드의 값 // 을 반환하고, 포인터는 다음 노드를 가리키도록 변경된다. 맨 마지막 노드에서 // GetNext 함수를 호출하면 NULL을 반환하기 때문에 while 루프를 돌면서 //GetNext 함수를 반복 호출하면 차례로 다음 노드를 참조할 수 있다.
pos = list.Find(_T(“WED”));
/* 특정 데이터를 검색하여 그 데이터가 저장된 노드의 포인터를 얻을 수 있다. /*
list.InsertAfter(pos, _T(“My BirthDay”));
/* 얻은 포인터를 매개변수로 넘겨주면서 InsertAfter 함수를 호출하면, 그 노드 바로 다음에 새로운 노드를 추가할 수 있고, InsertBefore 함수를 호출하면, 그 노드 바로 앞에 새로운 노드를 추가할 수 있다. */
for(pos = list.GetHeadPosition(); pos != NULL;)
{
data = list.GetNex(pos);
cout<<data<<endl;
}
}
p.s 요것또한 Visual c++ 6 완벽가이드 2nd 내용 중...
'programming > MFC' 카테고리의 다른 글
SendMessage & PostMessage (0) | 2011.02.23 |
---|---|
visual 2008에서 ClassWiard 따라하기(?) (1) | 2010.12.23 |
MFC의 배열클래스 (0) | 2010.12.21 |
PreTranslateMessage() 함수 사용 예제 (0) | 2010.09.12 |
MFC 기본 윈도우 프로시져 소스 (0) | 2010.09.06 |