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;
}
相关推荐
liu****7 分钟前
一.脚手架介绍以及部分工具使用
开发语言·数据结构·c++·手脚架开发
fish_xk22 分钟前
c++类和对象(上)
c++
历程里程碑1 小时前
C++ 6 :string类:高效处理字符串的秘密
c语言·开发语言·数据结构·c++·笔记·算法·排序算法
武帝为此1 小时前
【字典树 C++ 实现】
开发语言·c++
Azxcc02 小时前
cpp-httplib:路径参数解析类剖析
c++·后台开发·httplib
曼巴UE52 小时前
UE C++ 字符串的操作
java·开发语言·c++
天天进步20152 小时前
Linux 实战:如何像查看文件一样“实时监控” System V 共享内存?
开发语言·c++·算法
liulilittle2 小时前
C++ OS相关。
c++
仰泳的熊猫2 小时前
1176 The Closest Fibonacci Number
数据结构·c++·算法·pat考试
点云SLAM3 小时前
C++中constexpr 与 explicit关键字使用详解
c++·explicit关键字·隐式转换·c++编译·constexpr关键字·c++11/17/20