C++初阶:vector类的模拟实现(含模板)

文章详细介绍了C++中的Vector类模板,包括其构造函数、成员函数如push_back、insert、erase等操作,以及容量管理、初始化列表和迭代器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

1.Vector.h

2.Test.cpp


1.Vector.h

#include <iostream>
#include <cassert>
#include <algorithm>
using namespace std;
template <class T>
class Vector
{
public:
    typedef T *iterator;

    typedef const T *const_iterator;

    iterator begin() const
    {
        return _start;
    }

    iterator end() const
    {
        return _finish;
    }

    size_t size() const
    {
        return _finish - _start;
    }

    size_t capacity() const
    {
        return _endofstorage - _start;
    }

    T &operator[](size_t i)
    {
        assert(i < size());
        return _start[i];
    }

    const T &operator[](size_t pos) const
    {
        assert(pos < size());
        return _start[pos];
    }

    Vector<T> &operator=(Vector<T> v)
    {
        swap(v);
        return *this;
    }

    Vector() {}

    Vector(const Vector<T> &v)
    {
        reserve(v.capacity());
        for (auto &e : v)
        {
            push_back(e);
        }
    }

    Vector(initializer_list<T> il)
    {
        reserve(il.size());
        for (auto &e : il)
        {
            push_back(e);
        }
    }

    template <class InputIterator>
    Vector(InputIterator first, InputIterator last)
    {
        while (first != last)
        {
            push_back(*first);
            ++first;
        }
    }

    // 防止push整型时失效
    Vector(int n, const T &val = T())
    {
        reserve(n);
        for (int i = 0; i < n; i++)
        {
            push_back(val);
        }
    }

    Vector(size_t n, const T &val = T())
    {
        reserve(n);
        for (size_t i = 0; i < n; i++)
        {
            push_back(val);
        }
    }

    ~Vector()
    {
        if (_start)
        {
            delete[] _start;
            _start = _finish = _endofstorage = nullptr;
        }
    }

    void reserve(size_t n)
    {
        if (n > capacity())
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值