C++ Day7

仿照vector手动实现自己的myVector,最主要实现二倍扩容功能

#include <iostream>
#include<vector>

using namespace std;

template<typename T,typename D>
class myVector
{
private:
    T* iterator;    //迭代器
    D len;    //元素总数量
    D size;   //最大容量
public:
    //无参构造
    myVector(){};

    // 显性定义有参构造函数
    myVector(D len,T val);

    //析构函数
    ~myVector();

    //拷贝构造函数
    myVector(const myVector &other);

    //拷贝赋值函数
    myVector &operator=(const myVector &other);

    //判空
    bool myVector_empty();

    //判满
    bool myVector_full();

    //任意位置插入
    void myVector_insert(D pos);

    //任意位置删除
    void myVector_pop(D pos);

    //清空容器
    void myVector_outall();

    //求容器的大小
    D myVector_size();

    //输出容器内所有元素
    void myVector_show();
};

// 显性定义有参构造函数
template<typename T,typename D>
myVector<T,D>::myVector(D len,T val)
{
    this->len=len;
    size=len;
    iterator=new T[size+1];
    for(int i=0;i<len;i++)
    {
        iterator[i]=val;
    }
    cout<<"myVector::有参构造"<<endl;
}

//析构函数
template<typename T,typename D>
myVector<T,D>::~myVector()
{
    delete iterator;
    cout<<"myVector::析构函数"<<endl;
}

//拷贝构造函数
template<typename T,typename D>
myVector<T,D>::myVector(const myVector &other)
{
    size=other.size;
    len=other.len;
    iterator=new T(size);
    for(int i=0;i<len;i++)
    {
        iterator[i]=other.iterator[i];
    }
    cout<<"myVector::拷贝构造函数"<<endl;
}

/*//拷贝赋值函数
template<typename T,typename D>
myVector& myVector<T,D>::myVector &operator=(const myVector &other)
{

}*/

//判空
template<typename T,typename D>
bool myVector<T,D>::myVector_empty()
{
    if(0==len)
    {
        return true;
    }
    return false;
}

//判满
template<typename T,typename D>
bool myVector<T,D>::myVector_full()
{
    if(len==size)
    {
        return true;
    }
    return false;
}

//任意位置插入
template<typename T,typename D>
void myVector<T,D>::myVector_insert(D pos)
{
    if(myVector_full())
    {
        T* buf=new T (size);
        for(int i=0;i<size;i++)
        {
            *buf=*iterator;
            buf++;
            iterator++;
        }
        delete []iterator;
        size=2*size;    //二倍扩容
        T* iterator=new T (size);
        for(int i=0;i<size/2;i++)
        {
            *iterator=*buf;
            buf++;
            iterator++;
        }
    }

    T i;
    cout<<"请输入要插入的数据:";
    cin>>i;
    //后移
    for(int j=len;j>=pos;j--)
    {
        iterator[j]=iterator[j-1];
    }

    for(int j=0;j<pos;j++)
    {
        iterator++;
    }
    *iterator=i;
    len++;
    cout<<"插入成功"<<endl;
    return ;
}

//任意位置删除
template<typename T,typename D>
void myVector<T,D>::myVector_pop(D pos)
{
    if(myVector_empty())
    {
        cout<<"已经是空容器了,没有元素可以删除了"<<endl;
        return ;
    }
    //前移
    for(int j=pos-1;j<len-2;j++)
    {
        iterator[j]=iterator[j+1];
    }
    len--;
    cout<<"第"<<pos<<"位删除成功"<<endl;
    return ;
}

//清空容器
template<typename T,typename D>
void myVector<T,D>::myVector_outall()
{
    if(myVector_empty())
    {
        cout<<"已经是空容器了,不需要清空"<<endl;
        return ;
    }
    /*
    cout<<"开始清空队列"<<endl;
    T temp=0;
    for(;front!=tail;front=(front+1)%128)
    {
        temp=arr[front];
        cout<<temp<<"出队成功"<<endl;
    }
    */
    len=0;
    cout<<"清空队完成"<<endl;
    return ;
}


//求容器的大小
template<typename T,typename D>
D myVector<T,D>::myVector_size()
{
    return size;
}

//输出容器内所有元素
template<typename T,typename D>
void myVector<T,D>::myVector_show()
{
    for(int i=0;i<len;i++)
    {
        cout<<iterator[i]<<endl;
    }
}

int main()
{
    //有参 构造
    myVector<double,int> s(2,3.3);
    s.myVector_show();
    //s.myVector_insert(1);



    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值