可变长数组

C++动态数组类实现
本文详细介绍了一个使用C++实现的动态数组类CArray,包括构造函数、拷贝构造函数、析构函数、赋值运算符重载、下标运算符重载及push_back方法的实现。该类支持动态调整大小,提供了数组长度获取、元素访问等功能。
#include <iostream>
#include <cstring>

class CArray {
    int size;
    int *ptr;
public:
    CArray(int s = 0); 
    CArray(CArray& a);
    ~CArray();
    void push_back(int v);
    CArray& operator=(const CArray& a);
    int length() {return size;}
    int& CArray::operator[](int i) {
        return ptr[i];
    }
};

CArray::CArray(int s):size(s) {
    if (s == 0)
        ptr = NULL;
    else 
        ptr = new int[s];
}

CArray::CArray(CArray& a) {
    if (!a.ptr) {
        ptr = NULL;
        size = 0;
        return ;
    }
    ptr = new int[a.size];
    memcpy(ptr, a.ptr, sizeof(int) * a.size);
    size = a.size;
}

CArray::~CArray() {
    if (ptr)
        delete []ptr;
}

CArray& CArray::operator=(const CArray& a) {
    if (ptr == a.ptr)
        return *this;
    if (a.ptr == NULL) {
        if (ptr) delete []ptr;
        ptr = NULL;
        size = 0;
        return *this;
    }

    if (size < a.size) {
        if (ptr)
            delete []ptr;
        ptr = new int[a.size];
    }
    memcpy(ptr, a.ptr, sizeof(int) * a.size);
    size = a.size;
    return *this;
}

void CArray::push_back(int v) {
    if (ptr) {
        int *tmpPtr = new int[size+1];
        memcpy(tmpPtr, ptr, sizeof(int) * size);
        delete []ptr;
        ptr = tmpPtr;
    } else 
        ptr = new int[1];
    ptr[size++] = v;
}

  

 

转载于:https://www.cnblogs.com/ruruozhenhao/p/10150889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值