修复一个计算新的capacity的bug

This commit is contained in:
邹晓航
2014-10-13 14:42:32 +08:00
parent baa310f02a
commit b751d2ad4e

View File

@@ -42,11 +42,6 @@ namespace TinySTL{
viter operator - (const difference_type i)const{ return viter(ptr_ - i); } 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){ ptr_ -= i; return *this; }
difference_type operator - (const viter& vit)const{ return (ptr_ - vit.ptr_); } difference_type operator - (const viter& vit)const{ return (ptr_ - vit.ptr_); }
friend viter operator + (const viter& vit, const difference_type i);
friend viter operator + (const difference_type i, const viter& vit);
friend viter operator - (const viter& vit, const difference_type i);
friend viter operator - (const difference_type i, const viter& vit);
}; };
template<class T> template<class T>
viter<T>::viter(const viter& vit){ viter<T>::viter(const viter& vit){
@@ -59,22 +54,6 @@ namespace TinySTL{
} }
return *this; return *this;
} }
template<class T>
viter<T> operator + (const viter<T>& vit, const typename viter<T>::difference_type i){
return vit + i;
}
template<class T>
viter<T> operator + (const typename viter<T>::difference_type i, const viter<T>& vit){
return vit + i;
}
template<class T>
viter<T> operator - (const viter<T>& vit, const typename viter<T>::difference_type i){
return vit + i;
}
template<class T>
viter<T> operator - (const typename viter<T>::difference_type i, const viter<T>& vit){
return vit + i;
}
}// end of anonymous namespace }// end of anonymous namespace
//********* vector ************* //********* vector *************
@@ -209,8 +188,8 @@ namespace TinySTL{
void reallocateAndFillN(iterator position, const size_type& n, const value_type& val); void reallocateAndFillN(iterator position, const size_type& n, const value_type& val);
size_type getNewCapacity(size_type len)const{ size_type getNewCapacity(size_type len)const{
size_type oldCapacity = endOfStorage_ - start_; size_type oldCapacity = endOfStorage_ - start_;
auto res = std::max(oldCapacity, len); auto res = TinySTL::max(oldCapacity, len);
size_type newCapacity = (oldCapacity != 0 ? (oldCapacity + res) : 1); size_type newCapacity = (oldCapacity != 0 ? (oldCapacity + res) : len);
return newCapacity; return newCapacity;
} }
public: public:
@@ -356,7 +335,7 @@ namespace TinySTL{
difference_type locationNeed = last - first; difference_type locationNeed = last - first;
if (locationLeft >= locationNeed){ if (locationLeft >= locationNeed){
auto tempPtr = end() - 1; iterator tempPtr = end() - 1;
for (; tempPtr - position >= 0; --tempPtr){//move the [position, finish_) back for (; tempPtr - position >= 0; --tempPtr){//move the [position, finish_) back
*(tempPtr + locationNeed) = *tempPtr; *(tempPtr + locationNeed) = *tempPtr;
} }