【C++教程从0到1入门编程】第十篇:STL中Vector类模拟实现

一、vector深度剖析及模拟实现

模拟实现源代码
#include <assert.h>
#include <iostream>
using namespace std;

namespace jyr {
    template <class T>
    class vector
    {
    public:
        typedef T* iterator;
        typedef const T* const_iterator;

        vector()
        {}

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

        // [first, last) 左必右开区间
        template <class InputIterator>
        vector(InputIterator first, InputIterator last)
        {
            while (first != last)
            {
                push_back(*first);
                ++first;
            }
        }

        //v2(v1)深拷贝
//        vector(const vector<T>& v)
//        {
//            _start = new T[v.capacity()];
//            //memcpy(_start, v._start, sizeof(T)*v.size());//浅拷贝
//            for (size_t i = 0; i < v.size(); ++i)
//            {
//                _start[i] = v._start[i];//当vector<vector<int>>时,是一个二维数组,没写赋值重载,是一个浅拷贝,需要再写赋值重载
//            }
//
//            _finish = _start + v.size();
//            _end_of_storage = _start + v.capacity();
//        }

        vector(const vector<T>& v)
        {
            vector<T> tmp(v.begin(), v.end());//借助迭代器拷贝来把v中的数据全部拷贝进tmp中
            swap(tmp);//tmp和this交换数据即可实现二维v2(v1)深拷贝
        }

        vector<T>& operator=(vector<T> v)
        {
            swap(v);//this和形参v交换,交换后的v因为是形参所以不会改变
            return *this;
        }

        void swap(vector<T>& v)
        {
            std::swap(_st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值