데이터를 모으고 개수를 자동으로 관리하는 고정된 크기의 배열.
TStaticVector Template [Bottom] [Top]
- 구현 목적
- 메모리 할당없이 고정된 크기의 배열을 사용한다.
- STL 의 Vector, Queue 의 단순 기능을 구현한다.
- 내부 구조
- 고정된 크기의 배열
- 장점
- 인덱스(배열 첨자)로 즉시 접근하거나 Queue 와 같이 앞/뒤로 데이터 순차 접근 가능하다.
- 단점
- 사용 전 prepare() 함수를 호출하여 사용 준비를 해야한다.
1 // File: Template/TStaticVector.h
2
3 // TStaticVector.h : TStaticVector 템플릿 선언
4 //
5
6 #pragma once
7
8 //------------------------------------------------------------------------------
9 // TStaticVector 템플릿 설명
10 //
11 // [구현 목적]
12 // 1. STL 의 Vector, Queue 의 단순 기능 구현
13 //
14 // [내부 구조]
15 // 1. 정적 배열 구조
16 //
17 // [장점]
18 // 1. 인덱스(배열 첨자)로 즉시 접근 가능
19 // 2. Queue 와 같이 앞/뒤로 순차 처리 가능
20 //
21 // [단점]
22 // 1. 사용 전 prepare() 함수를 호출하여 사용 준비 필요
23 //
24 // [사용법]
25 // 1. 추가 : push( 데이터 );
26 // 2. 접근1 : 변수 = front();
27 // 3. 접근2 : 변수 = back();
28 // 4. 재설정: prepare();
29 //
30 //------------------------------------------------------------------------------
31
32 // 템플릿 선언
33 template< typename _Type, int VECTOR_MAX >
34 class TStaticVector
35 {
36 //--------------------------------------------------------------------------
37 // 생성자/소멸자
38 public:
39 TStaticVector()
40 {
41 clear();
42 }
43
44 ~TStaticVector() {}
45
46 //--------------------------------------------------------------------------
47 // 멤버 함수
48 public:
49 void clear()
50 {
51 memset( m_data, 0, sizeof( m_data ) );
52 m_size = 0;
53 }
54
55 void prepare()
56 {
57 m_front = 0;
58 m_rear = m_size;
59 }
60
61 bool push( _Type & _data )
62 {
63 if( VECTOR_MAX <= m_size )
64 {
65 return false;
66 }
67
68 m_data[ m_size ] = _data;
69 ++m_size;
70
71 return true;
72 }
73
74 _Type & front()
75 {
76 INT16 _front = m_front;
77 ++m_front;
78 return m_data[ _front ];
79 }
80
81 _Type & back()
82 {
83 --m_rear;
84 return m_data[ m_rear ];
85 }
86
87 INT16 size()
88 {
89 return m_size;
90 }
91
92 // 멤버 함수 (연산자 재정의)
93 public:
94 _Type & operator[]( INT16 _off )
95 {
96 return m_data[ _off ];
97 }
98
99 //--------------------------------------------------------------------------
100 // 멤버 변수
101 protected:
102 INT16 m_front;
103 INT16 m_rear;
104
105 _Type m_data[ VECTOR_MAX ];
106 INT16 m_size;
107
108 }; // class TStaticVector
TStaticVector 사용법 [Bottom] [Top]
1 int main()
2 {
3 // 탬플릿 선언
4 TStaticVector< int, 10 > _queue;
5
6 // 데이터 추가
7 _queue.push( 1 );
8 _queue.push( 3 );
9 _queue.push( 5 );
10 _queue.push( 8 );
11 _queue.push( 10 );
12
13 // 사용 준비
14 _queue.prepare();
15
16 // 데이터 삭제 (데이터 포인터 반환)
17 for( INT16 i=0; _queue.size()>i; ++i )
18 {
19 // 데이터 접근1(배열 첨자) : _queue[ i ]
20 // 데이터 접근2(앞에서 순차): _queue.front()
21 // 데이터 접근3(뒤에서 순차): _queue.back()
22 }
23
24 // 초기화
25 _queue.clear();
26 }
