본문 바로가기

Native/C++

dArray

[code]#include <turboc.h>
#include <iostream>
using namespace std;

#define ELETYPE int

class dArray
{
protected:
    ELETYPE *ar;
    unsigned size;
    unsigned num;
    unsigned growby;

public:
    dArray(unsigned asize = 100, unsigned agrowby = 10);
    ~dArray();
    void insert(int idx, ELETYPE value);
    void Delete(int idx);
    void append(ELETYPE value);

    ELETYPE getAt(int idx)
    {
        return ar[idx];
    }
    unsigned getSize()
    {
        return size;
    }
    unsigned getNum()
    {
        return num;
    }
    void setAt(int idx, ELETYPE value)
    {
        ar[idx] = value;
    }
    void dump(char *sMark);        
};


dArray::dArray(unsigned asize, unsigned agrowby)
{
    size = asize;
    growby = agrowby;
    num = 0;
    ar = (ELETYPE*)malloc(size*sizeof(ELETYPE));
}

dArray::~dArray()
{
    free(ar);
}

void dArray::insert(int idx, ELETYPE value)
{
    unsigned need;

    need = num + 1;
    if(need > size)
    {
        size = need + growby;
        ar = (ELETYPE *)realloc(ar, size * sizeof(ELETYPE));
    }
    memmove(ar+idx+1, ar+idx, (num-idx)*sizeof(ELETYPE));
    ar[idx] = value;
    num++;
}

void dArray::Delete(int idx)
{
    memmove(ar+idx, ar+idx+1, (num-idx-1)*sizeof(ELETYPE));
    num--;
}

void dArray::append(ELETYPE value)
{
    insert(num, value);
}

void dArray::dump(char *sMark)
{
    unsigned i;
    cout << sMark << "=> size=" << size << ", count=" << num << ":";

    for(i=0; i<num; i++)
        cout << getAt(i) << ' ';

    cout << endl;
}

void main()
{
    dArray ar;
    int i;

    for(i=1;i<=8;i++) ar.append(i); ar.dump("six append");
    ar.insert(3, 10); ar.dump("ten append");
    ar.insert(3, 11); ar.dump("eleven append");
    ar.insert(3, 12); ar.dump("twelve append");
    ar.Delete(7); ar.dump("Element seven remove");
}[/code]

'Native > C++' 카테고리의 다른 글

연산자 함수 (operator function)  (0) 2013.10.02
revolve  (0) 2013.10.02
mutable  (0) 2013.10.02
const member function  (0) 2013.10.02
const member  (0) 2013.10.02