C++DAY7

封装vector

 

#include <iostream>

using namespace std;

int error = -1;

template <typename T>
class Myvector
{
private:
        T *first;
        T *last;
        T *end;
public:
    //构造函数
    Myvector():first(new T),last(first),end(first){}
    //析构函数
    ~Myvector();
    //拷贝构造
    Myvector(const Myvector &other);
    //拷贝赋值
    Myvector &operator = (const Myvector &other);
    //T &at(int index)
    T &at(int index);
    //empty()
    bool empty();
    //full()
    bool full();
    //front()
    T &front();
    //back()
    T &back();
    //size()
    int size();
    //clear()
    void clear();
    //expand()     二倍扩容函数
    void expand();
    //push_back()
    void push_back(const T &val);
    //pop_back()
    void pop_back();
};

template<typename T>
Myvector<T>::~Myvector()
{
    delete []first;
    delete []last;
    delete []end;

}

template<typename T>
Myvector<T>::Myvector(const Myvector &other)
{
    this->first = new T[other.end - other.first];
    this->first = other.first;
    this->last = other.last;
    this->end = other.end;


}

template<typename T>
Myvector<T> &Myvector<T>::operator =(const Myvector &other)
{
    if(this != &other)
    {
        delete [] first;
        this->first = new T[other.end - other.first];
        this->first = other.first;
        this->last = other.last;
        this->end = other.end;
    }
    return *this;
}

template<typename T>
T &Myvector<T>::at(int index)
{
    return first[index];
}

template<typename T>
bool Myvector<T>::empty()
{
    return first == last;
}

template<typename T>
bool Myvector<T>::full()
{
   return last == end;
}

template<typename T>
T &Myvector<T>::front()
{
    if(empty())
    {
        cout << "空" << endl;
        return error;
    }
   return *first;
}

template<typename T>
T &Myvector<T>::back()
{
    if(empty())
    {
        cout << "空" << endl;
        return error;
    }
    return *(last -1);
}

template<typename T>
int Myvector<T>::size()
{
    return last-first;
}

template<typename T>
void Myvector<T>::clear()
{
    last = first;
}

template<typename T>
void Myvector<T>::expand()
{
    T *temp = new T[2*size()];
    memcpy(temp,first,sizeof(T)*size());
    delete []first;
    first = temp;
    last = first + size();
    end = first + 2*size();
}

template<typename T>
void Myvector<T>::push_back(const T &val)
{
    *last++ = val;
    if(last == end)
        expand();
}

template<typename T>
void Myvector<T>::pop_back()
{
    if(empty())
    {
        cout << "空" << endl;
        return;
    }
    *last = 0;
    last--;
}


int main()
{
    Myvector <int> v1;
    for(auto i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }

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

    for(auto i = 0; i < v1.size(); i++)
    {
        cout << v1.at(i) << " ";
    }
    cout << endl;

    cout << v1.back() << endl;
    cout << v1.front() << endl;

    v1.pop_back();

    for(auto i = 0; i < v1.size(); i++)
    {
        cout << v1.at(i) << " ";
    }
    cout << endl;

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

    v1.clear();
    cout << "size = " << v1.size() << endl;
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值