C++实现vectors

#include <iostream>

using namespace std;

template <typename T>
class MyVector
{
private:
	T* first;
	T* last;
	T* end;
	
public:
    MyVector() {}
    MyVector(int size) : first(new T(size)) {
        last = first;
        end = first + size;
    }
    ~MyVector() {
        cout << "析构" << endl;
    }
    MyVector(const MyVector<T>& p) {
        int len = p.last - p.first;
        int size = p.end - p.first;

        this->first = new T[size];

        memcpy(this->first, p.first, len * sizeof(T));

        this->last = this->first + len;
        this->end = this->first + size;

    }
    MyVector& operator=(const MyVector<T>& p) {
        this->first = p.first;
        this->last = p.last;
        this->end = p.end;
    }

    T& at(int n) {
        int size = last - first;
        if (n > size || n < 0) {
            return NULL;
        }
        return first[n];
    }

    bool empty() {
        return this->first == this->last;
    }

    bool full() {
        return this->last == this->end;
    }

    T& front()const {
        return *first;
    }

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

    int size() {
        return last - first;
    }

    void clear() {
        last = first;
    }

    void expand() {
        int size2 = this->end - this->first;

        T* temp = new T[2 * size2];

        memcpy(temp, this->first, size2 * sizeof(T));

        delete[]first;

        first = temp;
        last = first + size2;
        end = first + 2 * size2;
    }

    void push_back(const T val) {
        if (this->full()) {
            this->expand();
        }
        *last = val;
        last++;
    }

    void pop_back() {
        if (this->empty()) {
            return;
        }
        --last;
    }

    void display() {
        T* mid = first;
        while (mid < last) {
            cout << *mid << " ";
            mid++;
        }
        cout << endl;
    }

};

int main()
{
    MyVector<int> my_01(5);
    my_01.display();

    my_01.push_back(5);
    my_01.display();

    my_01.push_back(10);
    my_01.display();

    my_01.push_back(12);
    my_01.display();

    my_01.pop_back();
    my_01.display();

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值