C++ Day4

构建myvector函数

要实现的函数: 构造函数 析构函数 拷贝构造 拷贝赋值 at() empty() full() front() back() size() clear() expand() 二倍扩容函数 push_back() pop_back()

#include <iostream>
#include <string>

using namespace std;

template <typename T>
class myvector
{
private:
    T *first;
    T *last;
    T *end;

public:
    myvector()
    {
        first=new T[1];
        last=first;
        end=first+1;
    };                        //构造出一个空的容器
    myvector(int num);  //使用num个val构造出一个容器
    myvector(const myvector &from );    //拷贝构造

    ~myvector(){};

    int size()
    {
        return last-first;
    }

    T& at(int pos)
    {
        return *(first+pos);
    }

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

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

    T& front()
    {
        return *first;
    }

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

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

    void expand()
    {
        int size=this->size();
        T* new_first=new T[size*2];
        memcpy(new_first,first,sizeof(T)*size);
        delete[] first;
        first=new_first;
        last=first+size;
        end=first+size*2;
    }

    void push_back(const T& data)
    {
        if(last==end)
        {
            expand();
        }
        *last=data;
        ++last;
    }

    void pop_back()
    {
        if(last!=first)
        {
            last--;
        }
    }

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

};

int main()
{
    myvector<int>q;
    q.push_back(1);
    q.push_back(2);
    q.push_back(3);
    q.push_back(4);
    q.push_back(5);
    q.push_back(6);
    q.push_back(7);
    q.pop_back();
    q.pop_back();
    q.show();
    cout<<q.at(4)<<endl;;
    if(q.empty()==0)
    {
        cout<<"为空"<<endl;
    }
    if(q.full()!=0)
    {
        cout<<"为满"<<endl;
    }
    cout<<q.front()<<endl;;
    cout<<q.back()<<endl;
    cout<<q.size()<<endl;
    q.clear();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值