[MFC] CList 사용 방법

[MFC] Linked List (링크드 리스트) 사용 방법



이번 포스팅에서는 MFC 환경에서 링크드 리스트를 어떻게 사용하는지에 대하여 간단하게 알아보도록 하겠습니다.

 

먼저 링크드 리스트란 무엇이냐?


링크드 리스트는 노드(node)와 링크(Link)로 구성 되어 집니다. 노드는 실제의 정보를 담고 있는 단위이고, 링크는 인접 노드의 위치를 저장하고 있습니다. 링크 덕분에 리스트가 연결이 되고 노드를 순차적으로 접근할 수 있습니다. 링크는 노드를 연결할 수 있는 고리를 뜻합니다.


 

그럼 실제 MFC에서 리스트를 어떻게 선언하고 사용하는지에 대하여 알아보도록 하겠습니다.


 

첫 번째로, MFC 프로젝트를 생성하여 주시는데 아래와 같이 콘솔 버전으로 생성해 주시기 바랍니다.

 


 

그리고 아래와 같이 test.cpp에 코드를 작성하여 주시기 바랍니다.

 

[test.cpp]


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

// test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.

//

 

#include "stdafx.h"

#include "test.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

 

// 유일한 응용 프로그램 개체입니다.

 

CWinApp theApp;

 

using namespace std;

 

class Student{

public:

    int age;

    CString name;

 

    Student()

    {

        age = 0;

        name = _T("");

    }

 

    Student(int age, CString name)

    {

        this->age = age;

        this->name = name;

    }

 

    void PrintStudent()

    {

        cout<<"나이 : "<<age<<endl;

        cout<<"이름 : "<<name<<endl;

    }

};

 

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

    int nRetCode = 0;

 

    HMODULE hModule = ::GetModuleHandle(NULL);

 

    if (hModule != NULL)

    {

        // MFC 초기화합니다초기화하지 못한 경우 오류를 인쇄합니다.

        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))

        {

            // TODO: 오류 코드를 필요에 따라 수정합니다.

            _tprintf(_T("심각한 오류: MFC 초기화하지 못했습니다.\n"));

            nRetCode = 1;

        }

        else

        {

            // TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.

 

            //템플릿 리스트 선언

            CList<Student, Student&> list; //타입이 Student List 선언 

 

            Student _stu1(12, _T("홍길동")); //해당  Student 객체에 나이와 이름 저장

            list.AddTail(_stu1); //링크드 리스트에 학생의 나이와 이름을 저장

 

            Student _stu2(13, _T("김길동"));

            list.AddTail(_stu2);

            

            Student _stu3(14, _T("고길동"));

            list.AddTail(_stu3);

 

            Student _stu4(15, _T("주길동"));

            list.AddTail(_stu4);

 

            Student _stu5(16, _T("강길동"));

            list.AddTail(_stu5);

 

            

            POSITION pos = list.GetHeadPosition(); //리스트에서 제일  번째 위치 대입

 

            while(pos != NULL//링크드 리스트의 값이 NULL값이 아닐때 까지 (  마지막 까지)

            {

                Student data = list.GetNext(pos);

 

                data.PrintStudent(); //해당  출력

            }

        }

    }

    else

    {

        // TODO: 오류 코드를 필요에 따라 수정합니다.

        _tprintf(_T("심각한 오류: GetModuleHandle 실패\n"));

        nRetCode = 1;

    }

 

    return nRetCode;

}

 

Colored by Color Scripter

cs

 

간단히 List 핵심 함수를 설명 드리자면 CList<Student, Student&> list; 이 코드는 list를 선언하였고 해당 리스트의 타입은 Student의 타입을 저장하는 list 입니다.


list.AddTail(); 이 함수는 맨 마지막 노드에 list를 추가 하겠다는 의미이고, POSITION pos = list.GetHeadPosition(); 이 코드는 리스트 제일 첫 부분인 헤드부분을 pos 변수에 대입한다는 뜻입니다.

 


 

[실행 결과]



위와 같이 해당 링크드 리스트안의 정보를 제대로 출력하는 것을 확인하실 수 있습니다.


감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY