반응형
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
//****************************************************************
// array class 2단계 !!
//****************************************************************
// 동적 배열 클래스 !!
//****************************************************************
#include <iostream>
using namespace std;
#define DEFAULT_SIZE 16
class Array
{
private:
    int * m_buf;        // 동적배열 포인터 !!
    int   m_size;       // 현재 데이타의 갯수 !!
    int   m_capacity;  // 전체 용량
public :
    Array() //기본 생성자 !!
    {  
        m_buf  = new int[DEFAULT_SIZE];
        memset( m_buf, 0, DEFAULT_SIZE );
        m_size = 0; 
        m_capacity = DEFAULT_SIZE;
    }
    Array( int capa)
    {
        m_buf =  new int[capa];
        memset( m_buf, 0, capa );
        m_size = 0; 
        m_capacity = capa;
    }
    // 1) 인덱스 기능 !!!
    int  operator[] (int index)
    {  
        return m_buf[index];
    }
    //1) 리사이즈 :  배열의 크기를 변경 !!
    void Resize( int newCapa)
    {
        m_capacity =  newCapa;
        int * temp =  new int[m_capacity];
        memcpy( temp, m_buf, sizeof(int) * m_size );   
        delete [] m_buf;
        m_buf  = temp;
    }
    // 2) 자동 증가 !!  --> 배열에 값이 인서트가 되면 !!
    void push_back( int data ) //배열에 마지막에 값을 하나 삽입 !!
    {  
        if( m_size == m_capacity)
            Resize( m_capacity *2 ); // _msize: heap에 할당된 메모리의 크기 !!
 
        m_buf[m_size] = data;
        m_size++;
    }
    void pop_back() //배열의 맨뒤에서 1개 삭제 !! -->0으로 초기화 !! 
    {
        m_buf[m_size] = 0;
        m_size--;
    }
    //*************************************************************************
    // 1) 삽입
    //    - insert (  int index , int value )  // 1개
    //   -  insert ( int index,  int  value[] );   // 여러개의 값을 넣어라 !!
    // 2) 삭제
    //    erase (int index): index한개 지워라 !!
    //    erase ( int value) // 배열안에서 value값을 처음에 있는 한개를 지워라 !!
    //    clear() : 초기화 !!
    // 3) 유틸리티 
    //  - reverse : 뒤집어라 -->  10 , 20, 30, --> 30, 20, 10 
    //*************************************************************************
    int getSize(){ return m_size; }
    int getCapacity(){return this->m_capacity; }
    ~Array()
    {   //메모리 해제 !!
        delete [] m_buf;
    }
    // 객체 출력자 !!
     
     
};
 
ostream & operator<<( ostream & os ,  Array & ar)
{
    for(int i = 0; i< ar.getSize(); i++)
        os << "[ " <<  ar[i] << " ]";
        
        os << endl;
        return os;
}
 
 
void main()
{
    Array arr(2);
         
    arr.push_back(10);
    arr.push_back(20);
    cout <<  arr.getCapacity() << endl;
    arr.push_back(30);
    cout <<  arr.getCapacity() << endl;
     
 
     
    cout << arr;
     
    arr.pop_back();
 
    cout << arr;
 
    arr.pop_back();
     
    cout << arr;
     
}
</iostream>

'C, C++' 카테고리의 다른 글

[C++] 템플릿  (0) 2014.11.18
[C++] String class  (0) 2014.11.18
[C++] () 연산자 오버로딩 !!  (0) 2014.11.18
[C++] 전역 함수를 이용한 연산자 오버로딩  (0) 2014.11.18
[C++] 연산자 오버로딩  (0) 2014.11.18

+ Recent posts