반응형
#include 
#define BUF_SIZE 5

using namespace std; 

// 배열을 추상화한 클래스 !! 
class vector
{
//배열의 행동과 속성 
private: 
	int m_buf[BUF_SIZE]; 
	int m_size; 
public : 
	int getSize() { return m_size; }
	vector() 
	{
		memset(m_buf, 0, BUF_SIZE);
		m_size = 0; 
	}
	// 배열의 행동들... 
	//1) 인덱스를 통한 접근 !! 
	int & operator[](int index)
	{
		return m_buf[index]; 
	}
	void push_back(int data)
	{
		if( m_size <= BUF_SIZE-1) 
		{
			m_buf[m_size] = data;
			m_size++;
		}
	}
	void pop_back()
	{
		if( m_size > 0)
		{
			m_buf[m_size-1] = 0;
			m_size--;
		}
	}
	void Insert(  int * Where,   int data) 
	{   
		int * p = m_buf + m_size; 

		if( m_size <= BUF_SIZE-1) 
		{
			while( p != Where)
			{
				*p = *(p-1);
				 p--;
			}
			*(Where+1) = data; 
			m_size++;
		}					
	}
	void erase(  int * Where ) 
	{
		int * p =  Where; 

		while(  p != m_buf + m_size) 
		{
			*p = *(p+1);
			 p++;
		}
		m_size--;
	}

	int * find( int val) 
	{
		for(int i = 0; i


#include 


using namespace std; 

// 배열을 추상화한 클래스 !!
// 1차 버전에 대한 개선 !! 
//  - 정적 --> 동적 형태의 자료구조로 개선 !! 
class vector
{
//배열의 행동과 속성 
private: 
	int * m_buf ; 
	int   m_capa; //전체 크기
	int   m_size; // 현재 아이템의 개수 
public : 
	int getSize() { return m_size; }
	vector( int capa =  16 ) 
	{
		m_buf = new int[capa];
		m_capa = capa; 
		memset(m_buf, 0, m_capa);
		m_size = 0;
	}
	// 복사 생성자 !!  
	vector( const vector & v  )
	{
		// 앑은 복사 !!  -->m	m_buf  = v.m_buf; 
		m_buf = new int[ v.m_capa ]; 
		m_size = v.m_size; 
		m_capa = v.m_capa;
		memcpy( m_buf, v.m_buf, m_capa); 
	}


	// 배열의 행동들... 
	//1) 인덱스를 통한 접근 !! 
	int & operator[](int index)
	{
		return m_buf[index]; 
	}
	void push_back(int data)
	{
		if( m_size <= m_capa -1) 
		{
			m_buf[m_size] = data;
			m_size++;
		}
	}
	void pop_back()
	{
		if( m_size > 0)
		{
			m_buf[m_size-1] = 0;
			m_size--;
		}
	}
	void Insert(  int * Where,   int data) 
	{   
		int * p = m_buf + m_size; 

		if( m_size <= m_capa-1) 
		{
			while( p != Where)
			{
				*p = *(p-1);
				 p--;
			}
			*(Where+1) = data; 
			m_size++;
		}					
	}
	void erase(  int * Where ) 
	{
		int * p =  Where; 

		while(  p != m_buf + m_size) 
		{
			*p = *(p+1);
			 p++;
		}
		m_size--;
	}

	int * find( int val) 
	{
		for(int i = 0; i

#include 
#include 

using namespace std; 

// 배열을 추상화한 클래스 !!
// 2차 버전에 대한 개선 !! 
//  - int 데이타만 저장 가능한 배열 클래스를 템플릿을 이용하여 
 
template < typename T > 
class vector
{
//배열의 행동과 속성 
private: 
	T * m_buf ; 
	int   m_capa; // 전체 크기
	int   m_size; //  현재 아이템의 개수 
public : 
	int getSize() { return m_size; }
	vector( int capa =  16 ) 
	{
		m_buf = new T[capa];
		m_capa = capa; 
		memset(m_buf, 0, m_capa);
		m_size = 0;
	}
	// 복사 생성자 !!  
	vector( const vector & v  )
	{
		// 앑은 복사 !!  -->m	m_buf  = v.m_buf; 
		m_buf = new T[ v.m_capa ]; 
		m_size = v.m_size; 
		m_capa = v.m_capa;
		memcpy( m_buf, v.m_buf, m_capa); 
	}


	// 배열의 행동들... 
	//1) 인덱스를 통한 접근 !! 
	T & operator[](int index)
	{
		return m_buf[index]; 
	}
	void push_back(T data)
	{
	//	if( m_size <= m_capa -1) 
	//	{
		//	m_buf[m_size] = data;
		//	m_size++;
	//	}
		Insert( End(), data); 

	}
	void pop_back()
	{
	//	if( m_size > 0)
	//	{
	//		m_buf[m_size-1] = 0;
	//		m_size--;
	//	}
		erase( End());
	}
	void Insert(  T * Where,   T data) 
	{   
		T * p = m_buf + m_size; 

		if( m_size <= m_capa-1) 
		{
			while( p != Where)
			{
				*p = *(p-1);
				 p--;
			}
			*(Where+1) = data; 
			m_size++;
		}					
	}
	void erase(  T * Where ) 
	{
		T * p =  Where; 

		while(  p != m_buf + m_size) 
		{
			*p = *(p+1);
			 p++;
		}
		m_size--;
	}

	T * find( T val) 
	{
		for(int i = 0; i v;


	v.push_back("10");
	v.push_back("30");
	v.Insert( v.find("10") ,"20");
		
	for( string * str = v.Begin(); str != v.End(); str++) 
	{
		cout <<  *str <

'자료구조' 카테고리의 다른 글

[자료구조] Map  (0) 2014.12.01
[자료구조] List  (0) 2014.12.01
[자료구조] C언어 동적배열 사용  (0) 2014.11.18
[자료구조] C 언어 동적 배열  (0) 2014.11.18
[자료구조] C 언어 정적배열  (0) 2014.11.18

+ Recent posts