【C++】day6学习成果

#include 

using namespace std;

template<typename T>
class MyVector
{
private:
    T *p;               //动态数组的首地址 用来保存数据
    int Size;        //动态数组的元素个数
    int max1size;     //动态数组的最大长度
public:
    //无参数 - 构造一个空的vector
    MyVector():Size(1),p(new T[1]){}

    //数量(num)和值(val)
    //-构造一个初始放入num个值为val的元素的Vector
    MyVector(int num,const T &val):
        Size(num),max1size(num),p(new T[num])
    {
        for(int i=0;i<num;i++)
        {
            p[i]=val;
        }
    }

    //vector(from) - 构造一个与vector from 相同的vector
    MyVector(const MyVector &other):
        Size(other.Size),max1size(other.max1size),p(new T[max1size])
    {
        for(int i=0;i<other.Size;i++)
        {
            p[i]=other.p[i];
        }
    }

    //析构函数
    ~MyVector()
    {
        delete []p;
        p=nullptr;
    }

    //at() 函数 返回当前Vector指定位置loc的元素的引用. at() 函数 比 [] 运算符更加安全, 因为它不会让你去访问到Vector内越界的元素
    T& at(int loc) const
    {
        if(loc<max1size)
        {
            return p[loc];
        }else {
            cout<<"下标越界"<<endl;
            throw double(1);
        }
    }

    //back() 函数返回当前vector最末一个元素的引用
    T& back()
    {
        return p[Size-1];
    }

    //capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量
    size_t capacity()
    {
        return max_size;
    }

    //clear()函数删除当前vector中的所有元素.
    void clear()
    {

        delete []p;
        Size=0;
        cout<<"删除所有元素成功"<<endl;
    }

    //判空
    bool empty()
    {
        if(Size==0)
        {
            return true;
        }else
        {
            return false;
        }
    }

    //删除指定位置元素
    T erase(size_t loc)
    {
        for(int i=loc;i<Size-1;i++)
        {
            p[i]=p[i+1];
        }
        Size-=1;
        return p;
    }

    //front()函数返回当前vector起始元素的引用
    T& front()
    {
        return p;
    }

    //max_size() 函数返回当前vector所能容纳元素数量的最大值
    size_t max_size()
    {
        return max1size;
    }

    //pop_back()函数删除当前vector最末的一个元素
    void pop_back()
    {
        p[Size-1]=0;
        Size-=1;
    }

    //push_back()添加值为val的元素到当前vector末尾
    void push_back(const T &val)
    {
        Size+=1;
        if(Size>max1size)
        {
            max1size=2*max1size;
            T *ptr=new T[max1size];
            for(int i=0;i<Size;i++)
            {
                ptr[i]=p[i];
            }
            delete [] p;
            this->p=ptr;
        }
        p[Size-1]=val;
    }

    //当前vector的大小为size,且对新创建的元素赋值val
//    void resize( size_t size, T val )
//    {
//        if(size>this->Size)
//        {

//        }else
//        {

//        }
//    }

    void show()
    {
        for(int i=0;i<Size;i++)
        {
            cout<<"p["<<i<<"]="<<p[i]<<" ";
        }
        cout<<endl;
    }
};

int main()
{
    MyVector <string> v(3,"啦啦啦");
    v.show();

    cout<<"v.maxsize="<<v.max_size()<<endl;

    cout<<"111"<<endl;
    v.push_back("新的一天");
    cout<<"v.back="<<v.back()<<endl;

    v.show();
    return 0;
}

你可能感兴趣的:(c++,学习,开发语言)