반응형
#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 #includeusing 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 |