데이터를 모으고 개수를 자동으로 관리하는 고정된 크기의 배열.

TStaticVector Template [Bottom] [Top]

   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 }

Template/StaticVector (last edited 2011-07-04 05:17:11 by viper)