9.14 C++作业

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

#include <iostream>


using namespace std;


template <typename T>
class Myvector
{
    T *data;    //存储数据的数组
    int len;      //当前数组的长度
    int mycapa;   //容纳数据的总容量

public:
    //构造函数
    Myvector():data(NULL),len(0),mycapa(0){cout<<"无参构造"<<endl;}
    Myvector(int n, T a)
    {
        data =new T[n];
        len = n;
        mycapa = n;
        for(int i=0;i<n;i++)
        {
            data[i]=a;
        }
        cout<<"有参构造"<<endl;

    }


    //判空
    bool my_empty()
    {
        if(0 == len)
        {
            return 0;
        }
        return 1;
    }

    //判满
    bool my_full()
    {
        if(len == mycapa)
        {
            return 0;
        }
        return 1;
    }

    //在末尾插入一个元素
    int mypop_back(T a)
    {
        if(0 == mycapa)
        {
            mycapa = 1;
            data = new T[1];
        }
        else if(len+1 > mycapa)        //如果数组长度大于最大容量,最大容量二倍扩容
        {
            mycapa = 2*len;
            int *p = new T[mycapa];
            for(int i=0; i<len; i++)
            {
                p[i] = data[i];
            }
            delete []data;
            data = p;
        }
        data[len] = a;
        len++;
    }

    //任意插入
    void my_insert(int pos, T a)
    {
        if(0 == mycapa)
        {
            mycapa = 1;
            data = new T[1];
            data[0] = a;
        }
        else if(len+1 > mycapa)
        {
            mycapa = 2*len;
            int *p = new T[mycapa];
            for(int i=0; i<pos; i++)
            {
                p[i] = data[i];
            }
            p[pos] = a;
            for(int i=pos; i<len; i++)
            {
                p[i+1] = data[i];
            }
            delete []data;
            data = p;
        }
        else
        {
            for(int i=len-1; i>=pos; i--){
                data[i+1] = data[i];
            }
            data[pos] = a;
        }
        len++;
    }

    //移除最后一个元素
    void mypop_back()
    {
        len--;
        cout<<"移除最后一个元素成功"<<endl;
    }

    //删除指定位置元素
    void my_erase(int pos)
    {
        if(my_empty() && pos>len)
        {
            cout<<"删除失败"<<endl;
        }
        for(int i=pos; i<len; i++)
        {
            this->data[i-1] = this->data[i];
        }
        len--;
        cout<<"删除指定位置元素成功"<<endl;
    }

    //展示
    void my_show()
    {
        cout<<"展示元素";
        for(int i=0; i<len; i++)
        {
            cout<<data[i];
            cout<<" ";
        }
        cout<<endl;
    }

    //返回能容纳的最大容量
    void my_capacity()
    {
        cout<<"最大容量为"<<mycapa<<endl;
    }

    //返回指定位置元素
    void my_at(int pos)
    {
        cout<<"第"<<pos<<"个元素是"<<data[pos]<<endl;
    }

    //清空所有元素
    int my_clear()
    {
        cout<<"已全部清空"<<endl;
        return len=0;
    }


};


using namespace std;

int main()
{
    Myvector<int> m(4,6);   //有参构造创建了4个元素,每个元素都是6
    m.my_show();

    m.mypop_back(7);      //尾插
    m.mypop_back(8);
    m.my_show();
    m.my_capacity();      //返回最大容量,此时为8

    cout<<"***************************************"<<endl;

    m.my_insert(5,9);     //任意位置插入元素
    m.my_show();

    cout<<"***************************************"<<endl;

    m.my_erase(5);        //任意位置删除元素
    m.my_show();

    cout<<"***************************************"<<endl;

    m.mypop_back();       //移除最后一个元素
    m.my_show();

    cout<<"***************************************"<<endl;

    m.my_at(2);

    m.my_clear();         //清空
    m.my_show();



    return 0;
}
相关推荐
MinBadGuy21 分钟前
【GeekBand】C++设计模式笔记5_Observer_观察者模式
c++·设计模式
QuantumStack3 小时前
【C++ 真题】B2037 奇偶数判断
数据结构·c++·算法
结衣结衣.4 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
学习使我变快乐4 小时前
C++:静态成员
开发语言·c++
心怀花木4 小时前
【C++】多态
c++·多态
风清扬_jd4 小时前
Chromium 添加书签功能浅析c++
c++·chrome
吃椰子不吐壳4 小时前
c++类与对象二
c++
zaim16 小时前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
学习使我变快乐6 小时前
C++:const成员
开发语言·c++
一律清风9 小时前
QT-文件创建时间修改器
c++·qt