动态数组类的设计

程序代码如下,主要结合了运算符重载的特点进行数组类的设计。实现了数组的插入,复制等功能,通过这个程序对vector容器有了一定的了解。

#include <iostream>

using namespace std;

class Array
{
private :
    int size;
    int *ptr;
public :
    Array(int s = 0);
    Array(const Array &a);
    ~Array();
    void push_back(int v);
    Array & operator =(const Array &a);
    int length()
    {
        return size;
    }
    int & Array::operator[](int i)
    {
        return ptr[i];
    }
};
Array::Array(int s )
{
    if (s == 0)
        ptr = NULL;
    else
    {
        ptr = new int[s];
    }
    size = s;
}
Array::Array(const Array &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;
}
Array & Array::operator =(const Array &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)
    {
        delete[] ptr;
        ptr = new int[a.size];
        memcmp(ptr, a.ptr, a.size * sizeof(int));
    }
    else
    {
        memcmp(ptr, a.ptr, a.size * sizeof(int));
    }
    size = a.size;
    return (*this);
}
Array::~Array()
{
    if (ptr)
        delete[] ptr;
}                                   
void Array::push_back(int v)
{
    if (ptr)
    {
        int *tmp = NULL;
        tmp = new int[size + 1];
        memcpy(tmp, ptr, sizeof(int)*size);
        delete[] ptr;
        ptr = tmp;
    }
    else
        ptr = new int[1];
    ptr[size++] = v;
}
int main()
{
    Array a;
    for (int i = 1; i < 3; i++)
        a.push_back(i);
    for (int i = 0; i < a.length(); i++)
        cout << a[i] << endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/helloforworld/p/5655242.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值