C++-day7作业

#include <iostream>
#define MAX 40

using namespace std;

template<typename T>
class MyVector
{
private:
    T *data;
    int len;
    int csize;
public:
    //无参构造
    MyVector():len(0),csize(0)
    {
        data=new T[len];
    }

    //有参构造
    MyVector(int l,T d)
    {
        data=new T[l];
        for(int i=0;i<l;i++)
        {
            data[i]=d;
        }
        csize=l;
    }

    //析构函数
    ~MyVector()
    {
        delete []data;
        cout<<"析构函数"<<endl;
    }

    //求MyVector容器的大小
    int capacity()
    {
        return csize;
    }

    //添加元素
    void push_back(T d)
    {
        if(csize==0)
        {
            csize=1;
            data=new T[csize];
        }
        if(len==csize&&csize!=0)
        {
            T *ndata=NULL;
            csize=csize*2;
            ndata=new T[len];
            memcpy(ndata,data,sizeof(T)*len);
            delete []data;
            data=new T[csize];
            memcpy(data,ndata,sizeof(T)*len);
        }
        data[len]=d;
        len=len+1;
    }

    //求容器的真实大小
    int size()
    {
        return len;
    }

    //给容器中的元素赋值
    void assign(int n,T d)
    {
        if(data!=NULL)
        {
            delete []data;
        }
        if(n<csize)
        {
            data=new T[csize];
            for(int i=0;i<n;i++)
            {
                data[i]=d;
            }
            len=n;
        }
        else
        {
            data=new T[n];
            for(int i=0;i<n;i++)
            {
                data[i]=d;
            }
            len=n;
            csize=n;
        }
    }

    //访问容器中的元素
    T &at(int pos)
    {
        return data[pos];
    }

    //判空函数
    bool empty()
    {
        return len==0;
    }

    //清空容器中的元素
    void clear()
    {
        len=0;
    }
    
    //返回起始位置的引用
    T &front()
    {
        if(empty())
        {
            return;
        }
        else
        {
            return data[0];
        }
    }
    
    //返回最后一个位置的引用
    T &back()
    {
        if(empty())
        {
            return;
        }
        else
        {
            return data[len-1];
        }
    }
    
    //移除最后一个元素
    int pop_back()
    {
        if(empty())
        {
            cout<<"无元素,移除失败"<<endl;
            return 0;
        }
        len=len-1;
        return 1;
    }
    
    //返回起始元素的迭代器
    T *begin()
    {
        T *p=&data[0];
        return p;
    }
    
    //返回末尾元素下一个位置的迭代器
    T *end()
    {
        T *p=&data[len];
        return p;
    }
};

int main()
{
    MyVector<int> m1;
    MyVector<int> m2(5,6);
    
    m2.push_back(9);
    m2.push_back(5);
    m2.push_back(2);
    m2.push_back(7);
    
    cout<<m2.capacity()<<endl;
    cout<<m2.size()<<endl;
    
    m1.assign(6,3);
    
    m2.clear();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值