(C++)10月10日作业

题目:

 

代码:

#include <iostream>
#include <cstring>
using namespace std;

template <class T>
class my_vector
{
private:
    T *front;
    T *end;
    T *back;
public:
    my_vector():front(NULL),end(NULL),back(NULL){}
    my_vector(int n,T x):front(NULL),end(NULL),back(NULL){
        int i=0;
        for(i=0;i<n;i++){
            push_back(x);
        }
    }
    my_vector(T *a,T *b):front(NULL),end(NULL),back(NULL){
        int *i=0;
        for(i=a;i!=b;i++){
            push_back(*i);
        }
    }
    const T &get_front()const{
        return front;
    }
    const T &get_end()const {
        return end;
    }
    const bool empty()const{
        return front==end;
    }
    const int size()const{
        return end-front;
    }
    const int capacity()const {
        return back-front;
    }
    void push_back(const T &x){
        if(front==NULL){
            front=new T;
            end=back=front;
            *end=x;
            end++;
            back++;
        }else{
            if(end==back){
                T *t;
                int temp=back-front;
                t=new T[temp];
                memcpy(t,front,temp*sizeof(T));
                delete front;
                front=new T[2*temp*sizeof(T)];
                end=front+temp;
                back=front+2*temp;
                memcpy(front,t,temp*sizeof(T));
                delete t;
            }
            *end=x;
            end++;
        }

    }
    const int pop_back(){
       if(end==front){
           return -1;
       }else{
           end--;
       }
       return 0;
    }
    T &at(const int &n)const{
        return front[n];
    }
    //[]运算符重载
    T &operator [](const int &n)const {
        return front[n];
    }
    const T &my_front()const{
        return *front;
    }
    const T &my_back()const{
        return *(end-1);
    }
    void clear(){
        end=front;
    }

    const T *my_begin(){
        return front;
    }
    const T *my_end()const{
        return end;
    }
};

int main()
{
    my_vector<int> v1;//无参构造一个vector对象

    //判断容器内是否为空
    if(v1.empty()){
        cout<<"empty"<<endl;
    }else{
        cout<<"not empty"<<endl;
    }
    //求容器大小
    cout<<"size of v1:"<<v1.size()<<endl;
    //求容器当前最大容量
    cout<<"capacity of v1:"<<v1.capacity()<<endl;
    //进行尾插
    for(int i=0;i<5;i++){
        v1.push_back(i+10);
        cout<<"capacity of v1:"<<v1.capacity()<<endl;
    }
    cout<<"size of v1:"<<v1.size()<<endl;
    //尾删
    v1.pop_back();
    cout<<"size of v1:"<<v1.size()<<endl;

    for(int i=0;i<v1.size();i++){
//        cout<<v1.at(i)<<" ";
        cout<<v1[i]<<" ";
    }
    cout<<endl;

    //找到第一个和最后一个
    cout<<"the first one:"<<v1.my_front()<<endl;
    cout<<"the last one:"<<v1.my_back()<<endl;

    //使用迭代器遍历容器
    for(auto it=v1.my_begin();it!=v1.my_end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    for(int i=0;i<v1.size();i++){
        cout<<v1.at(i)<<" ";
//        cout<<v1[i]<<" ";
    }
    cout<<endl;
    //清空所有元素
    v1.clear();
    cout<<"size of v1:"<<v1.size()<<endl;

    cout<<"*********************************************************"<<endl;
    my_vector<char> v2(5,'K');
    for(int i=0;i<v2.size();i++){
        cout<<v2.at(i)<<" ";
    }
    cout<<endl;
    cout<<"*********************************************************"<<endl;

    int arr[10]={2,3,6,8,4,5,1,9,37,7};
    my_vector<int> v3(arr, arr+6);
    for(int i=0;i<v3.size();i++){
        cout<<v3.at(i)<<" ";
    }
    cout<<endl;
    return 0;
}

测试:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值