[转]C++实现动态数组

来源:互联网 发布:fittime软件好用吗. 编辑:程序博客网 时间:2024/05/22 22:37
**头文件:Array.h**#ifndef Array_hpp#define Array_hpptemplate <class T>class Array{private:    T *base;        //数组首地址    int length;     //数组中元素    int size;       //数组大小,以数组中元素的大小为单位public:    //初始化数组,分配内存    bool init();    //检查内存是否够用,不够用就增加    bool ensureCapcity();    //添加元素到数组尾    bool add(T item);    //插入元素到数组的具体位置,位置从1开始    bool insert(int index,T item);    //删除指定位置的元素并返回,位置从1开始    T del(int index);    //返回指定位置的元素    T objectAt(int index);    //打印数组所有元素    void display();};#endif /* Array_hpp */实现:Array.cpp#include "Array.hpp"#include <mm_malloc.h>#include <iostream>using namespace std;template<typename T> bool Array<T>::init(){        base = (T *)malloc(10*sizeof(T));    if(!base){        return false;    }    size = 10;    length = 0;    return true;}template<typename T> bool Array<T>::ensureCapcity(){    if(length >= size){        T *newBase = (T*)realloc(base,10 * sizeof(T) + size);        if(!newBase){            return false;        }        base = newBase;        size += 10;        newBase = nullptr;    }    return true;}template<typename T> bool Array<T>::add(T item){    if(!ensureCapcity()){        return false;    }    T *p = base + length;    *p = item;    length ++;    return true;}template<typename T> bool Array<T>::insert(int index,const T item){    if(!ensureCapcity()){        return false;    }    if(index < 1 || index > length){        return false;    }    T *q = base + index - 1;    T *p = base + length - 1;    while( p >= q){        *(p+1) = *p;        p--;    }    *q = item;    q = nullptr;    p = nullptr;    length ++;    return true;}template<typename T>T Array<T>::del(int index){    if(index<1 || index > length){        return NULL;    }    T *q = base + index - 1;    T item = *q;    ++q;    T *p = base + length;    while(q <= p){        *(q-1)=*q;        ++q;    }    length --;    return item;}template<typename T>T Array<T>::objectAt(int index){    if(index<1 || index > length){        return NULL;    }    T *q = base;    return *(q + index - 1);}template <typename T>void Array<T>::display(){    T *q = base;    T *p = base +length - 1;    while (q<=p) {        cout << *(q++)<<" ";    }    cout << endl;}**使用**#include <iostream>#include "Array.cpp"using namespace std;int main(int argc, const char * argv[]) {    Array<int> array = *new Array<int>;    array.init();    array.add(1);    array.insert(1,2);    array.objectAt(1);    return 0;}
原创粉丝点击