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;
}
相关推荐
m0_5698814738 分钟前
基于C++的数据库连接池
开发语言·c++·算法
.select.44 分钟前
c++ auto
开发语言·c++·算法
2401_884563241 小时前
C++中的访问者模式高级应用
开发语言·c++·算法
君义_noip1 小时前
信息学奥赛一本通 1613:打印文章
c++·算法·信息学奥赛·csp-s
消失的旧时光-19431 小时前
C++ 多态核心三件套:虚函数、纯虚函数、虚析构函数(面试 + 工程完全指南)
开发语言·c++·面试·虚函数·纯虚函数·虚析构函数
赵民勇1 小时前
gtkmm库之GtkWindow与ApplicationWindow用法详解
linux·c++
咱就是说不配啊1 小时前
3.20打卡day34
数据结构·c++·算法
Larry_Yanan2 小时前
Qt网络开发之基于 QWebEngine 实现简易内嵌浏览器
linux·开发语言·网络·c++·笔记·qt·学习
2401_831824962 小时前
嵌入式C++驱动开发
开发语言·c++·算法
cui_ruicheng2 小时前
C++数据结构进阶:哈希表实现
数据结构·c++·算法·哈希算法·散列表