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;
}
相关推荐
xiaolang_8616_wjl3 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
夜月yeyue3 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
无小道4 小时前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
FirstFrost --sy5 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
Tanecious.6 小时前
C++--map和set的使用
开发语言·c++
Yingye Zhu(HPXXZYY)6 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
liulilittle7 小时前
LinkedList 链表数据结构实现 (OPENPPP2)
开发语言·数据结构·c++·链表
无聊的小坏坏7 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
山河木马7 小时前
前端学习C++之:.h(.hpp)与.cpp文件
前端·javascript·c++
2401_891957317 小时前
list的一些特性(C++)
开发语言·c++