• 自定义数组容器MyArray框架


    #include<iostream>
    
    using namespace std;
    
    template <typename T>
    class  MyArray
    {
    public:
        MyArray(int nCapacity)
        {
            this->mCapacity = nCapacity;
            this->mSize = 0;
            this->pAddr = new T[this->mCapacity];
        }
    
        //拷贝构造
        MyArray(const MyArray<T>& arr)
        {
            this->mCapacity = arr.mCapacity;
            this->mSize = arr.mSize;
            this->pAddr = new T[arr.mCapacity];
            for (size_t i = 0; i < arr.mSize; i++)
            {
                this->pAddr[i] = arr.pAddr[i];
            }
        }
    
        ~MyArray()
        {
            if (this->pAddr != NULL)
            {
                delete this->pAddr;
            }
        
        }
    
        //重载运算符[]
        T& operator[](int nIndex)
        {
            return this->pAddr[nIndex];    //返回数组偏移量为nIndex的引用
        }
    
        //重载运算符=
        MyArray<T> operator=(const MyArray<T>& arr)
        {
            if (this->pAddr != NULL)
            {
                delete this->pAddr;
            }
    
            this->mCapacity = arr.mCapacity;
            this->mSize = arr.mSize;
            this->pAddr = new T[arr.mCapacity];
            for (size_t i = 0; i < arr.mSize; i++)
            {
                this->pAddr[i] = arr.pAddr[i];
            }
            return *this;
        }
        //往数组里添加数据
        void PushBack(T& data)
        {
            //数组当前数据的个数等于或大于数组容量时,这时不能够添加数据
            if (this->mSize >= this->mCapacity)
            {
                return;
            }
            this->pAddr[this->mSize] = data;
            this->mSize++;
        }
        //往数组里添加数据,对右值取引用
        void PushBack(T&& data)
        {
            //数组当前数据的个数等于或大于数组容量时,这时不能够添加数据
            if (this->mSize >= this->mCapacity)
            {
                return;
            }
            this->pAddr[this->mSize] = data;
            this->mSize++;
        }
        
    
    public:
        //当前数组一共可以容下多少个元素
        int mCapacity;
        //当前数组有多少个元素
        int mSize;
        //保存数据的首地址
        T* pAddr;
    
    };
    
    void TestOne()
    {
        MyArray<int> myArray(30);
        int nData1, nData2, nData3;
        nData1 = 10;
        nData2 = 20;
        nData3 = 30;
        myArray.PushBack(nData1);
        myArray.PushBack(nData2);
    
        //当直接PushBack具体的数值时,例如100,就不能用void PushBack(T& data),不能对右值取引用,要用到void PushBack(T&& data),多一个&,表示对右值取引用
        //左值:可以在多行使用
        //右值:临时变量,只能当前使用
        myArray.PushBack(100);
        myArray.PushBack(200);
    
        for (size_t i = 0; i < myArray.mSize; i++)
        {
            cout << myArray[i] << endl;
        }
    }
    
    class Person
    {
    public:
        int nAge;
    };
    
    void TestTwo()
    {
        Person p1;
        p1.nAge = 10;
    
        MyArray<Person> myArray(30);
        myArray.PushBack(p1);
    
        for (size_t i = 0; i < myArray.mSize; i++)
        {
            cout << myArray[i].nAge << endl;
        }
    
    }
    
    int main()
    {
        
        TestOne();
        TestTwo();
    
    
        system("pause");
        return 0;
    }
    111
  • 相关阅读:
    Linux系统挂载NTFS移动硬盘
    ActiveReport报表开发谈谈ActiveReport的中文化问题
    硬件接口开发之USB电话录音盒来电显示
    如何使用正则表达式进行QQ校友的数据采集
    硬件接口开发之Modem来电显示
    关于MSHTML控件使用的问题
    【转】ISession接口介绍
    发送带嵌入图片邮件之SMTP实现和ESMTP实现
    C#进行MapX二次开发之地图搜索
    Database2Sharp混淆处理之经验分享(国庆专辑,祝福我们的祖国)
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/12997071.html
Copyright © 2020-2023  润新知