2023/5/15

  手动实现My_vector。

要实现的函数:

                构造函数;析构函数;拷贝构造;拷贝赋值;at(); empty();full() ;front(); back(); size(); clear(); expand(); 二倍扩容函数 push_back(); pop_back()。

 

#include <iostream>
#include <cstring>

using namespace std;

template <typename T>

class My_vector
{
private:
    T *first;
    T *last;
    T *end;

    T data;
    T len;

public:
    //无参构造
    My_vector () {
        first = nullptr;
        last = first;
        end = first;
    }

    //有参构造
    My_vector(T d,T l) : data(d),len(l){
        first = new T(l);
        last = first;
        end = first + l - 1;

        int i = 0;
        while(i < l)
        {
            *last = data;
            i++;
            last++;

        }
    }

    //析构函数
    ~My_vector() {
        delete first;
        first = nullptr;
        delete last ;
        last = nullptr;
        delete end;
        end = nullptr;
    }

    //拷贝构造
    My_vector(const My_vector &other):first(other.first),last(other.last),\
        end(other.end),data(other.data) {

    }

    //拷贝赋值
    My_vector &operator= (const My_vector& other)
    {
            this->first = other.first;
            this->last = other.last;
            this->end = other.end;
            this->data = other.data;

            return *this;
     }
    //at()
    T &at(int l)
    {
        T *p = first;
        return *(p + l);
    }

    //empty()
    bool empty()
    {
        return first == last;
    }

    //full()
    bool full()
    {
        return last == end;
    }

    //front()
    T front()
    {
        return *(first);
    }

    //back()
    T back()
    {
        return *(last - 1);
    }

    //size()
    size_t size()
    {
        return last - first;
    }

    //clear()
    void clear()
    {
        first = last;
    }

    //expand()
    void expand()
    {

        int new_size = last-first+1;
                T *new_first=new T[new_size*2];


                for(int i=0;i<new_size;++i)
                {
                    *(new_first+i)=*(first+i);
                }
                 first = new_first;
                 last = new_first + new_size - 1;
                 end = new_first + new_size*2;
    }


    //push_back()
        void push_back(T r) {


                if(full())
                       {
                           expand();
                       }
                else if(empty())
                {
                    first = new T;
                    last = end = first+1;
                }
            *last = r;
            last++;
        }

        //pop_back()
        void pop_back() {
            last--;
        }


        //遍历
        void show() {
            if(empty())
                return;

            for(auto p=first; p!=last; p++) {
                cout<<*p<<"  ";
            }
            cout<<endl;
        }

};


int main()
{

    My_vector<int> m1(1, 3);

        My_vector<int> m3;
        m3 = m1;
        m3.show();

        cout<<"m1.size = "<<m1.size()<<endl;

        m1.show();

        cout<<"m1.at(2) = "<<m1.at(2)<<endl;

        if(m1.empty()) {
            cout<<"m1为空!"<<endl;
        }else {
            cout<<"m1不为空!"<<endl;
        }

//        My_vector<int> m2;
//        cout << "m2.size = " << m2.size() << endl;

//        for(int i=0; i<10; i++) {
//            m2.push_back(i+1);
//            cout<<"m2.size = "<<m2.size()<<endl;
//        }

//        m1.push_back(1314);
//        m1.show();

//        m2.push_back(1314);
//        m2.show();

        m1.clear();
//        m2.clear();
        m3.clear();



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值