Thinking Different




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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// cmd.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
 
#include "stdafx.h"
#include <atlcoll.h>
 
// 예제 Book 클래스
class CBook
{
public:
    CBook(int i) : mId(i) {}
    inline int GetId() { return mId; }
 
private:
    int mId;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    /* 선언 */
    CAtlList<CBook*> mBookList;
    CBook* book1 = new CBook(1);
    CBook* book2 = new CBook(2);
    CBook* book3 = new CBook(3);
    CBook* book4 = new CBook(4);
 
    /* 입력 */
    // 앞쪽에 추가
    mBookList.AddHead(book1);
    mBookList.AddHead(book3);
 
    // 뒤쪽에 추가
    mBookList.AddTail(book2);
    mBookList.AddTail(book4);
 
    // 다른 리스트의 값들을 전부 리스트에 추가한다
    CAtlList<CBook*> mBookListNew;
    CBook* book5 = new CBook(5);
    CBook* book6 = new CBook(6);
 
    mBookListNew.AddTail( book5 );
    mBookListNew.AddTail( book6 );
 
    // mBookListNew의 book5, book6이 전부 추가된다.
    mBookList.AddHeadList( &mBookListNew );
    mBookList.AddTailList( &mBookListNew );
 
    /* 검색 */
    POSITION pos = mBookList.Find(book4);
 
    /* 갯수 */
    DWORD count = mBookList.GetCount();
 
    /* 값 얻기 */
    // 앞쪽 값 하나 가져옴
    CBook* fBook = mBookList.GetHead();
 
    // 뒷쪽 값 하나 가져옴
    CBook* lBook = mBookList.GetTail();
 
    /* 위치 */
    // 시작 위치
    POSITION pos = mBookList.GetHeadPosition();
    // 마지막 위치
    POSITION tPos = mBookList.GetTailPosition();
    while( pos != NULL )
    {
        // Position으로 현재 값을 얻음 (포지션:현재)
        CBook* nBook = mBookList.GetAt(pos);
 
        // Position으로 현재 값을 얻음 (포지션:다음)    (순방향 검색)
        CBook* aBook = mBookList.GetNext(pos);
 
        // Position으로 현재 값을 얻음 (포지션:이전) (역방향 검색)
        CBook* pBook = mBookList.GetPrev(pos);
 
        // 현재 값을 처음으로 이동
        mBookList.MoveToHead(pos);
 
        // 현재 값을 마지막으로 이동
        mBookList.MoveToTail(pos);
    }
 
    /* 기타 */
    // 서로 위치를 바꿈
    mBookList.SwapElements( pos, tPos );
 
    // 현재 포지션 이전에 값을 추가 (return : 추가한 포지션)
    POSITION nowPos = mBookList.InsertBefore( pos, book4 );
 
    // 현재 포지션 다음에 값을 추가 (return : 추가한 포지션)
    POSITION nowPos2 = mBookList.InsertAfter( pos, book4 );
 
    // 비어있는지 확인
    bool bEmpty = mBookList.IsEmpty();
 
    /* 삭제 */
    // 모두 삭제
    mBookList.RemoveAll();
 
    // 해당 포지션의 값을 삭제
    mBookList.RemoveAt(pos);
 
    // 리스트에서는 앞,뒤 값을 삭제하면서 값을 반환 (리스트에서 값 빼내오는 기능)
    CBook* bookFirst = mBookList.RemoveHead();
    CBook* bookLast = mBookList.RemoveTail();
 
    // 리스트에서 앞,뒤 값을 삭제 반환없음
    mBookList.RemoveHeadNoReturn();
    mBookList.RemoveTailNoReturn();
 
    delete book6;
    delete book5;
    delete book4;
    delete book3;
    delete book2;
    delete book1;
 
    return 0;
}


'프로그래밍 언어 > C++' 카테고리의 다른 글

static_cast vs dynamic_cast 속도 비교  (4) 2013.04.09
c++ 문자열 공백 제거 매크로  (0) 2013.03.03
CAtlMap 정리 및 예제  (0) 2013.02.28
2차원배열을 1차원배열처럼  (0) 2013.01.20
VARIANT STRUCTURE  (0) 2012.05.19