2023年5月15日 星期一 C++作业

11 篇文章 0 订阅
8 篇文章 0 订阅

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

代码

#include <iostream>
#include <vector>  //引入向量头文件

using namespace std;

template<typename T>
class Myvector
{
private:
    T *first;
    T *last;
    T *end;
    T data;
    size_t size;

public:
    //无参构造函数
    Myvector():first(nullptr),last(nullptr),end(nullptr){}
    //有参构造函数
    Myvector(T n, T d):data(d), size(n)
    {
        first = new T(n);
        last = first;
        end = first+n;
        for(int i=0; i<n; i++) {
        *last = d;
        last++;
        }
    }
    //遍历
    void show() {
        for(auto p=first; p!=last; p++) {
            cout<<*p<<"  ";
        }
        cout<<endl;
    }
    //析构函数
    ~Myvector(){
        delete first;
        first = nullptr;
        delete last;
        last = nullptr;
        delete end;
        end = nullptr;
    }
    //拷贝构造
    Myvector(const Myvector &other):first(other.first), last(other.last), end(other.end), data(other.data),size(other.size){}
    //拷贝函数
    Myvector &operator=(const Myvector &other) {
        this->first = other.first;
        this->last = other.last;
        this->end = other.end;
        this->size = other.size;
        return *this;
    }
    //at
    T &at(int n) {
        T* p = first;
        return *(p+n);
    }
    //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 T_size() {
        return last-first;
    }
    //clear
    void clear() {
        first=last;
    }
    //expand
    void expand() {
        size_t size1 = T_size();
        if(last==end) {
        T *temp = new T[size1*2];
        memcpy(first, temp, (sizeof(T)*size1));
        delete []first;
        first = temp;
        last = first+size1;
        end = first+(size1*2);
        }
    }
};

int main()
{
    Myvector<int> v1(5,2);
    v1.show();
    Myvector<int> v2(v1);
    v2.show();
    cout<<"v2.at(2) = "<<v2.at(2)<<endl;
    if(v1.empty()) {
        cout<<"v1为空"<<endl;
    }else {
        cout<<"v1不为空"<<endl;
    }
    if(v2.full()) {
        cout<<"v2为满"<<endl;
    }else {
        cout<<"v2不为满"<<endl;
    }
    cout<<"v2.T_size = "<<v2.T_size()<<endl;
    return 0;
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值