This commit is contained in:
邹晓航
2014-10-15 19:31:46 +08:00
parent e448779aa6
commit dd0f473995

View File

@@ -11,51 +11,6 @@
#include "UninitializedFunctions.h"
namespace TinySTL{
namespace {
template<class T>
class viter : public TinySTL::iterator<TinySTL::random_access_iterator_tag, T>{
private:
T * ptr_;
private:
T *getPtr(){ return ptr_; }
public:
viter() :ptr_(0){}
explicit viter(T *ptr):ptr_(ptr){}
viter(const viter& vit);
viter& operator = (const viter& vit);
operator T* (){ return ptr_; }//change to the primitive pointer type
T& operator *(){ return *ptr_; }
T *operator ->(){ return &(operator *()); }
viter& operator ++(){ ++ptr_; return *this; }
viter operator ++(int){ viter temp = *this; ++(*this); return temp; }
viter& operator --(){ --ptr_; return *this; }
viter operator --(int){ viter temp = *this; --(*this); return temp; }
bool operator == (const viter& vit)const{ return ptr_ == vit.ptr_; }
bool operator != (const viter& vit)const{ return !(*this == vit); }
viter operator + (const difference_type i)const{ return viter(ptr_ + i); }
viter& operator += (const difference_type i){ ptr_ += i; return *this; }
viter operator - (const difference_type i)const{ return viter(ptr_ - i); }
viter& operator -= (const difference_type i){ ptr_ -= i; return *this; }
difference_type operator - (const viter& vit)const{ return (ptr_ - vit.ptr_); }
};
template<class T>
viter<T>::viter(const viter& vit){
ptr_ = vit.ptr_;
}
template<class T>
viter<T>& viter<T>::operator = (const viter& vit){
if (this != &vit){
ptr_ = vit.ptr_;
}
return *this;
}
}// end of anonymous namespace
//********* vector *************
template<class T, class Alloc = allocator<T>>
class vector{
@@ -67,15 +22,15 @@ namespace TinySTL{
typedef Alloc dataAllocator;
public:
typedef T value_type;
typedef viter<T> iterator;
typedef const viter<T> const_iterator;
typedef T* iterator;
typedef const iterator const_iterator;
typedef reverse_iterator<T*> reverse_iterator;
typedef const reverse_iterator const_reverse_iterator;
typedef iterator pointer;
typedef T& reference;
typedef const T& const_reference;
typedef size_t size_type;
typedef typename iterator::difference_type difference_type;
typedef ptrdiff_t difference_type;
public:
//<2F><><EFBFBD><EFBFBD><ECA3AC><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
vector()
@@ -97,12 +52,12 @@ namespace TinySTL{
bool operator != (const vector& v);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
iterator begin(){ return iterator(start_); }
const_iterator begin()const{ return const_iterator(start_); }
const_iterator cbegin()const{ return const_iterator(start_); }
iterator end(){ return iterator(finish_); }
const_iterator end()const{ return const_iterator(finish_); }
const_iterator cend()const{ return const_iterator(finish_); }
iterator begin(){ return (start_); }
const_iterator begin()const{ return (start_); }
const_iterator cbegin()const{ return (start_); }
iterator end(){ return (finish_); }
const_iterator end()const{ return (finish_); }
const_iterator cend()const{ return (finish_); }
reverse_iterator rbegin(){ return reverse_iterator(finish_); }
const_reverse_iterator crbegin()const{ return const_reverse_iterator(finish_); }
reverse_iterator rend(){ return reverse_iterator(start_); }
@@ -375,8 +330,9 @@ namespace TinySTL{
}
template<class T, class Alloc>
typename vector<T, Alloc>::iterator vector<T, Alloc>::insert(iterator position, const value_type& val){
const auto index = position - begin();
insert(position, 1, val);
return position;
return begin() + index;
}
template<class T, class Alloc>
void vector<T, Alloc>::push_back(const value_type& value){