C++类模板:数组-创新互联-成都快上网建站

C++类模板:数组-创新互联

用类模板实现可变长数组:

创新互联公司是一家集网站建设,临洮企业网站建设,临洮品牌网站建设,网站定制,临洮网站建设报价,网络营销,网络优化,临洮网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#include#includeusing namespace std;
templateclass CArray
{int size; //数组元素的个数
    T *ptr; //指向动态分配的数组
public:
    CArray(int s = 0);  //s代表数组元素的个数
    CArray(CArray & a);
    ~CArray();
    void push_back(const T & v); //用于在数组尾部添加一个元素v
    CArray & operator=(const CArray & a); //用于数组对象间的赋值
    T length() {return size; }
    T & operator[](int i)
    {//用以支持根据下标访问数组元素,如a[i] = 4;和n = a[i]这样的语句
        return ptr[i];
    }
};
templateCArray::CArray(int s):size(s)
{ if(s == 0)
         ptr = NULL;
    else
        ptr = new T[s];
}
templateCArray::CArray(CArray & a)
{if(!a.ptr) {ptr = NULL;
        size = 0;
        return;
    }
    ptr = new T[a.size];
    memcpy(ptr, a.ptr, sizeof(T ) * a.size);
    size = a.size;
}
templateCArray::~CArray()
{ if(ptr) delete [] ptr;
}
templateCArray& CArray::operator=(const CArray & a)
{//赋值号的作用是使"="左边对象里存放的数组,大小和内容都和右边的对象一样
    if(this == & a) //防止a=a这样的赋值导致出错
    return * this;
    if(a.ptr == NULL) {//如果a里面的数组是空的
        if( ptr )
            delete [] ptr;
        ptr = NULL;
        size = 0;
        return * this;
    }
     if(size< a.size) {//如果原有空间够大,就不用分配新的空间
         if(ptr)
            delete [] ptr;
        ptr = new T[a.size];
    }
    memcpy(ptr,a.ptr,sizeof(T)*a.size);   
    size = a.size;
     return *this;
}
templatevoid CArray::push_back(const T & v)
{//在数组尾部添加一个元素
    if(ptr) {T *tmpPtr = new T[size+1]; //重新分配空间
    memcpy(tmpPtr,ptr,sizeof(T)*size); //拷贝原数组内容
    delete []ptr;
    ptr = tmpPtr;
}
    else  //数组本来是空的
        ptr = new T[1];
    ptr[size++] = v; //加入新的数组元素
}
int main()
{CArraya;
    for(int i = 0;i< 5;++i)
        a.push_back(i);
    for(int i = 0; i< a.length(); ++i)
        cout<< a[i]<< " ";   
    return 0;

注意:push_back()函数的实现,不是单纯的在数组末尾+1,而是要从新申请空间,要不造成越界

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:C++类模板:数组-创新互联
浏览地址:http://kswjz.com/article/cegecc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流