반응형
//****************************************************************
// array class 2단계 !! 
//****************************************************************
// 동적 배열 클래스 !! 
//****************************************************************
#include 
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;
	
}

'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