#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会被重新分配空间,需要重新获取。
C++ STL Vector详解
本文详细介绍了C++标准模板库中的Vector容器实现原理及其关键成员函数。探讨了插入、删除等操作的具体实现,并分析了这些操作如何影响迭代器的有效性。
425

被折叠的 条评论
为什么被折叠?



