C++——vector代码实现

 仿照系统的vector,手动实现一个my_vecto

#include <iostream>
#include<algorithm>
#include<numeric>


using namespace std;

template <typename T>
class my_vector
{

private:
    T* data;
    size_t my_s;
    size_t my_c;
public:

    //构造函数
    my_vector():data(NULL),my_s(0),my_c(0){}
    my_vector(T d,size_t s,size_t c):data(d),my_s(s),my_c(c){}
    //析构函数
    ~my_vector()
    {
        delete [] data;
        data=NULL;
        my_s=0;
        my_c=0;
    }
    //拷贝构造
    my_vector(const my_vector& vec)
    {
        my_s=vec.my_s;
        my_c=vec.my_c;
        data=new T[my_c];
        for(int i=0;i<my_s;i++)
        {
            data[i]=vec.data[i];
        }
    }

    //赋值运算符重载
    my_vector& operator=(const my_vector& vec)
    {
        if(this==&vec)
        {
            return *this;
        }
        T* temp = new T[my_c];
        for(int i=0;i<vec.my_s;i++)//++i?i++?
        {
            temp[i]=vec.data[i];
        }
        delete [] data;
        data=temp;
        my_s=vec.my_s;
        my_c=vec.my_c;
        return *this;

    }
    //[]运算符重载
    T& operator[](size_t index)
    {
        return data[index];
    }
    //==运算符重载
    bool operator==(const my_vector& vec)const
    {
        if(my_s!=vec.my_s)
        {
            return false;
        }
        for(int i=0;i<my_s;i++)
        {
            if(data[i]!=vec.data[i])
            {
                return false;
            }
        }

         return true;
    }
    //尾插
    void my_push_back(T val)
    {
        if(0==my_c)
        {
            my_c=1;
            data=new T[1];
        }
        else if(my_s+1>my_c)
         {
            my_c=my_c*2;
          T* temp=new T[my_c];
            for(int i=0;i<my_s;i++)
            {
                temp[i]=data[i];
            }
            delete [] data;
            data =temp;
         }
        data[my_s]=val;
        my_s++;
    }

    //删除
    void my_pop_back()
    {
        my_s--;
    }

    //大小
    size_t my_size()const
    {
        return my_s;
    }
    //元素访问
    //找到第一个元素
    T my_front()const
    {
        return data[0];
    }
    //找到最后一个元素
    T my_back()const
    {
        return data[my_s-1];
    }
    //返回第一个元素的迭代器
    T* my_begin()
    {
        return data;
    }
    //返回最后一个迭代器
    T* my_end()
    {
        return data+my_s;
    }
    //清空容器


    //判空
    bool my_empty()
    {
        return my_s==0;
    }
    //容量
    int my_capacity()
    {
        return my_c;
    }
    //遍历



};

int main()
{
    my_vector<int> v1;//无参构造一个vector对象
    //判空
    if(v1.my_empty())
    {
        cout<<"empty"<<endl;
    }
    else
    {
        cout<<"not empty"<<endl;
    }
    //大小
    cout<<"大小:"<<v1.my_size()<<endl;
    //容量
    cout<<"容量:"<<v1.my_capacity()<<endl;
    //尾插
    for(int i=0;i<5;i++)
    {
        v1.my_push_back(i+5);
    }
    cout<<v1.my_begin()<<endl;
    cout<<v1.my_end()<<endl;
    cout<<v1.my_front()<<endl;
    cout<<v1.my_back()<<endl;
    //大小
    cout<<"大小:"<<v1.my_size()<<endl;
    //容量
    cout<<"容量:"<<v1.my_capacity()<<endl;
    v1.my_pop_back();

    cout<<v1.my_begin()<<endl;
    cout<<v1.my_end()<<endl;
    cout<<v1.my_front()<<endl;
    cout<<v1.my_back()<<endl;
    //大小
    cout<<"大小:"<<v1.my_size()<<endl;
    //容量
    cout<<"容量:"<<v1.my_capacity()<<endl;


    cout << "Hello World!" << endl;
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值