diff --git a/TinySTL/Deque.h b/TinySTL/Deque.h index 3a06592..218460a 100644 --- a/TinySTL/Deque.h +++ b/TinySTL/Deque.h @@ -40,7 +40,9 @@ namespace TinySTL{ //TinySTL::swap(container_, it.container_); } reference operator *(){ return *cur_; } + const reference operator *()const{ return *cur_; } pointer operator ->(){ return &(operator*()); } + const pointer operator ->()const{ return &(operator*()); } dq_iter& operator ++(){ if (cur_ != getBuckTail(mapIndex_))//+1后还在同一个桶里 ++cur_; @@ -166,7 +168,6 @@ namespace TinySTL{ public: typedef T value_type; typedef dq_iter iterator; - typedef const iterator const_iterator; typedef T& reference; typedef const reference const_reference; typedef size_t size_type; @@ -197,11 +198,7 @@ namespace TinySTL{ deque& operator= (deque&& x); iterator begin(){ return beg_; } - const_iterator begin() const{ return beg_; } iterator end(){ return end_; } - const_iterator end() const{ return end_; } - const_iterator cbegin() const{ return beg_; } - const_iterator cend() const{ return end_; } size_type size() const{ return end() - begin(); } bool empty() const{ return begin() == end(); } diff --git a/TinySTL/ReverseIterator.h b/TinySTL/ReverseIterator.h index 71a5424..44e3c7d 100644 --- a/TinySTL/ReverseIterator.h +++ b/TinySTL/ReverseIterator.h @@ -5,7 +5,7 @@ namespace TinySTL{ template - class reverse_iterator{ + class reverse_iterator_t{ public: typedef Iterator iterator_type; typedef typename iterator_traits::iterator_category iterator_category; @@ -20,10 +20,10 @@ namespace TinySTL{ Iterator cur_; public: //构造。复制,析构相关 - reverse_iterator() :base_(0), cur_(0){} - explicit reverse_iterator(const iterator_type& it) :base_(it), cur_(it - 1){} + reverse_iterator_t() :base_(0), cur_(0){} + explicit reverse_iterator_t(const iterator_type& it) :base_(it), cur_(it - 1){} template - reverse_iterator(const reverse_iterator& rev_it){ + reverse_iterator_t(const reverse_iterator_t& rev_it){ base_ = (iterator_type)rev_it.base(); cur_ = base_ - 1; }; @@ -34,33 +34,33 @@ namespace TinySTL{ const_reference operator*()const{ return(*cur_); } pointer operator->(){ return &(operator *()); } const_pointer operator->()const{ return &(operator*()); } - reverse_iterator& operator ++(){ + reverse_iterator_t& operator ++(){ --base_; --cur_; return *this; } - reverse_iterator& operator ++(int){ - reverse_iterator temp = *this; + reverse_iterator_t& operator ++(int){ + reverse_iterator_t temp = *this; ++(*this); return temp; } - reverse_iterator& operator--(){ + reverse_iterator_t& operator--(){ ++base_; ++cur_; return *this; } - reverse_iterator operator--(int){ - reverse_iterator temp = *this; + reverse_iterator_t operator--(int){ + reverse_iterator_t temp = *this; --(*this); return temp; } reference operator[] (difference_type n){ return base()[-n - 1]; } - reverse_iterator operator + (difference_type n)const; - reverse_iterator& operator += (difference_type n); - reverse_iterator operator - (difference_type n)const; - reverse_iterator& operator -= (difference_type n); + reverse_iterator_t operator + (difference_type n)const; + reverse_iterator_t& operator += (difference_type n); + reverse_iterator_t operator - (difference_type n)const; + reverse_iterator_t& operator -= (difference_type n); private: Iterator advanceNStep(Iterator it, difference_type n, @@ -93,94 +93,94 @@ namespace TinySTL{ } public: template - friend bool operator == (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator == (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend bool operator != (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator != (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend bool operator < (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator < (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend bool operator <= (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator <= (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend bool operator > (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator > (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend bool operator >= (const reverse_iterator& lhs, - const reverse_iterator& rhs); + friend bool operator >= (const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); template - friend reverse_iterator operator + ( - typename reverse_iterator::difference_type n, - const reverse_iterator& rev_it); + friend reverse_iterator_t operator + ( + typename reverse_iterator_t::difference_type n, + const reverse_iterator_t& rev_it); template - friend typename reverse_iterator::difference_type operator- ( - const reverse_iterator& lhs, - const reverse_iterator& rhs); - };// end of reverse_iterator + friend typename reverse_iterator_t::difference_type operator- ( + const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs); + };// end of reverse_iterator_t template - reverse_iterator& reverse_iterator::operator += (difference_type n){ + reverse_iterator_t& reverse_iterator_t::operator += (difference_type n){ base_ = advanceNStep(base_, n, false, iterator_category()); cur_ = advanceNStep(cur_, n, false, iterator_category()); return *this; } template - reverse_iterator& reverse_iterator::operator -= (difference_type n){ + reverse_iterator_t& reverse_iterator_t::operator -= (difference_type n){ base_ = advanceNStep(base_, n, true, iterator_category()); cur_ = advanceNStep(cur_, n, true, iterator_category()); return *this; } template - reverse_iterator reverse_iterator::operator + (difference_type n)const{ - reverse_iterator res = *this; + reverse_iterator_t reverse_iterator_t::operator + (difference_type n)const{ + reverse_iterator_t res = *this; res += n; return res; } template - reverse_iterator reverse_iterator::operator - (difference_type n)const{ - reverse_iterator res = *this; + reverse_iterator_t reverse_iterator_t::operator - (difference_type n)const{ + reverse_iterator_t res = *this; res -= n; return res; } template - bool operator == (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator == (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return lhs.cur_ == rhs.cur_; } template - bool operator != (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator != (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return !(lhs == rhs); } template - bool operator < (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator < (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return lhs.cur_ < rhs.cur_; } template - bool operator > (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator > (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return lhs.cur_ > rhs.cur_; } template - bool operator >= (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator >= (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return !(lhs < rhs); } template - bool operator <= (const reverse_iterator& lhs, const reverse_iterator& rhs){ + bool operator <= (const reverse_iterator_t& lhs, const reverse_iterator_t& rhs){ return !(lhs > rhs); } template - reverse_iterator operator + ( - typename reverse_iterator::difference_type n, - const reverse_iterator& rev_it){ + reverse_iterator_t operator + ( + typename reverse_iterator_t::difference_type n, + const reverse_iterator_t& rev_it){ return rev_it + n; } template - typename reverse_iterator::difference_type operator - ( - const reverse_iterator& lhs, - const reverse_iterator& rhs){ + typename reverse_iterator_t::difference_type operator - ( + const reverse_iterator_t& lhs, + const reverse_iterator_t& rhs){ return lhs.cur_ - rhs.cur_; } } diff --git a/TinySTL/String.h b/TinySTL/String.h index fadb0de..122d398 100644 --- a/TinySTL/String.h +++ b/TinySTL/String.h @@ -17,8 +17,8 @@ namespace TinySTL{ typedef char value_type; typedef char * iterator; typedef const char * const_iterator; - typedef reverse_iterator reverse_iterator; - typedef const reverse_iterator const_reverse_iterator; + typedef reverse_iterator_t reverse_iterator; + typedef reverse_iterator_t const_reverse_iterator; typedef char& reference; typedef const char& const_reference; typedef size_t size_type; diff --git a/TinySTL/Vector.h b/TinySTL/Vector.h index 66bee2f..412a2a9 100644 --- a/TinySTL/Vector.h +++ b/TinySTL/Vector.h @@ -24,8 +24,8 @@ namespace TinySTL{ typedef T value_type; typedef T* iterator; typedef const iterator const_iterator; - typedef reverse_iterator reverse_iterator; - typedef const reverse_iterator const_reverse_iterator; + typedef reverse_iterator_t reverse_iterator; + typedef reverse_iterator_t const_reverse_iterator; typedef iterator pointer; typedef T& reference; typedef const T& const_reference; diff --git a/TinySTL/main.cpp b/TinySTL/main.cpp index 935de43..9fd79e8 100644 --- a/TinySTL/main.cpp +++ b/TinySTL/main.cpp @@ -1,9 +1,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -29,24 +31,19 @@ using namespace std; using namespace TinySTL::Profiler; - +bool comp_case_insensitive(char c1, char c2) { + return (std::tolower(c1) == std::tolower(c2)); +} int main(){ - //TinySTL::deque dq; - //int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; - int array[] = { 5, 3, 2, 7, 6, 8, 8 }; - TinySTL::binary_search_tree bst; - bst.insert(array, array + 7); - //std::vector vec; - TinySTL::vector vec; - ProfilerInstance::start(); - int i = 0; - for (; i != 1000000; ++i){ - vec.push_back(i); - } - ProfilerInstance::finish(); - ProfilerInstance::dumpDuringTime(); - cout << ProfilerInstance::millisecond() << endl; - + TinySTL::deque dq; + for (int i = 0; i != 10; ++i) + dq.push_front(i); + /*for (auto x : dq) + cout << x << endl;*/ + for (auto rit = dq.begin(); rit != dq.end(); ++rit) + cout << *rit << endl; + for (auto x : dq) + cout << x << endl; system("pause"); return 0; }