vector

C++ STL Vector详解
本文详细介绍了C++标准模板库中的Vector容器实现原理及其关键成员函数。探讨了插入、删除等操作的具体实现,并分析了这些操作如何影响迭代器的有效性。

#pragma once
#include "xmemory.h"
template<class _Ty,class _A=Allocator<_Ty> >
class vector {
public:
    using size_type =typename _A::size_type;
    using difference_type=typename _A::difference_type;
    using pointer=typename _A::pointer_type;
    using reference=typename _A::reference;
    typedef _Ty* iterator;
protected:
    void _Destory(iterator _F, iterator _L) {
        for (; _F != _L; _F++) {
            alloctor._Destroy(_F);
        }
    }
    iterator _Ucopy(iterator _F, iterator _L, iterator _P) {
        for (; _F != _L; _F++, _P++) {
            alloctor.construct(_P, _F);
        }
        return _P;
    }
    void _Ufill(iterator _F, size_type _N, const _Ty &_X) {
        for (; _N > 0; --_N, ++_F) {
            allocator.construct(_F, _X);
        }
    }
public:
    explicit vector(const _A &A1=_A()):alloctor(A1),_First(0),_Last(0),_End(0) {
    }
    iterator insert(iterator _P, const _Ty& _X = _Ty()) {

    }
    void insert(iterator _P, size_type _N, const _Ty &X) {
        if (_N > _End - _Last) {
            int n = size() + (_N < size()) ? size() : _N;
            iterator _S = alloctor.allocate(n, (void*)0);
            iterator _M = _Ucopy(_First, _P, _S);
            _Ufill(_M, _N, X);
            iterator _L=_Ucopy(_P, _Last, _M + _N);
            _Destory(_First, _Last);
            alloctor.deallocate(_First,_End-_First)
            _First = _S;
            _Last = _L;
            _End = _S + n;
        }
        else if (_N > _Last - _P) {
            _Ucopy(_P, _Last, _P + _N);
            _Ufill(_Last, _N-(_Last-P), _X);
            fill(_P, _Last, _X);
            _Last = _Last + _N;
        }
        else if(_N>0) {
            _Ucopy(_Last - _N, _Last, _Last);
            copy_backward(_P, _Last - _N, _Last);
            fill(_P, _P + _N, _X);
            _Last = _Last + _N;
        }
    }
    void insert(iterator _P, iterator _F, iterator _L) {

    }
    void erase(iterator _P) {
        alloctor.destroy(_P);
        fill(_P +1, _Last, _P);
        _Last -= 1;
    }
    void erase(iterator _F, iterator _L) {

    }
    iterator begin() {
        return _First;
    }
    iterator end() {
        return _Last;
    }
    int size() {
        return _Last - _First;
    }

private:
    _A alloctor;
    iterator _First, _Last, _End;
};

 

vector迭代器失效:

由于vector会被重新分配空间,需要重新获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值