MyArray

STL의 동적 배열인 vector와 비슷한 역할을 하는 MyArray 클래스이다.
클래스의 공개 메쏘드와 타입을 정리하였다.

메쏘드 이름은 STL의 vector와 이름을 비슷하게 하였다.
STL의 vector와 다른 부분만 설명 하겠다.

vector::clear()를 실행하면 데이터는 지워지지만 Capacity 용량은 변하지 않는다.
MyArray::Clear()도 똑같다.
MyArray::Release() 메쏘드는 Capacity 용량도 초기화 시키며, 메모리 공간도 삭제한다.

    typedef        dataType&            reference;

    typedef        const dataType&    const_reference;

    typedef        dataType*            iterator;

    typedef        const dataType*    const_iterator;

    typedef        dataType*           pointer;

 

 

 

    //생성자에서는 m_iSize와 m_iCapacity크기가 같다.

    MyArray(int iSize = 0);

    ~MyArray()

    //Capacity는 물론 모든 데이타가 제거 된다.

    void Release();

    //Capacity는 STL처럼 변하지 않는다.

    void Clear();

 

    //Capacity 설정 관련 메쏘드

    int  Reserve(int iSize);

    void Resize(int iSize);

 

    //데이터 추가 삭제

    void PushBack(dataType item);

    void PopBack();

    void PopBack(pointer item)

    bool Insert(int iIndex , dataType item)

    bool Erase(int iIndex)

 

    //크기 관련 메쏘드

    bool Empty() const

    int  MaxSize()

    int  Capacity()

    int  Size()

 

    //접근 관련 메쏘드

    reference At(int iIndex)

    reference operator[](int iIndex)

    operator pointer()

 

    // STL-style interface

    iterator    begin(void)        { return &m_pArray[0]; }

    iterator    end(void)        { return &m_pArray[0] + m_iSize; }

 

//main.cpp

#include "MyArray.h"

#include <stdio.h>

 

void main()

{

    MyArray<int> data;

 

    data.Reserve(10);

    for(int i = 0; i < 8; ++i)

    {

        data.PushBack(i*10);

        int capacity = data.Capacity();

        int size = data.Size();

        int pacity = data.Capacity();

    }

 

    int iData = data.At(2);

    data.Insert(5, 500);

    data.Insert(6, 600);

 

    data.Erase(5);

    data.PopBack(&iData);

    int ca = data.Capacity();

    int si = data.Size();

 

    MyArray<int>::iterator iter = data.begin();

    for(; iter != data.end(); iter++)

    {

        printf("%d\n",  *iter);

    }

}