From db47647c7186a2a1c8ef00709626495e11d7df97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Tue, 23 Sep 2014 17:20:58 +0800 Subject: [PATCH] bug fix --- TinySTL/ReverseIterator.h | 18 +++++++++--------- TinySTL/Vector.h | 4 ++++ TinySTL/main.cpp | 34 +++++++++++++--------------------- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/TinySTL/ReverseIterator.h b/TinySTL/ReverseIterator.h index 1fc6bc8..6513cd8 100644 --- a/TinySTL/ReverseIterator.h +++ b/TinySTL/ReverseIterator.h @@ -19,7 +19,7 @@ namespace TinySTL{ public: //构造。复制,析构相关 reverse_iterator() :base_(0), cur_(0){} - explicit reverse_iterator(iterator_type it) :base_(it), cur_(base_ - 1){} + explicit reverse_iterator(iterator_type it) :base_(it), cur_(it - 1){} template reverse_iterator(const reverse_iterator& rev_it){ base_ = (iterator_type)rev_it.base(); @@ -27,9 +27,9 @@ namespace TinySTL{ }; //其他成员函数 - iterator_type base() const{ return base_; } - reference operator*() const{ return (*cur_); } - pointer operator->() const{ return &(operator *()); } + iterator_type base(){ return base_; } + reference operator*(){ return (*cur_); } + pointer operator->(){ return &(operator *()); } reverse_iterator& operator ++(){ --base_; --cur_; @@ -50,12 +50,12 @@ namespace TinySTL{ --(*this); return temp; } - reference operator[] (difference_type n) const{ + 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); - reverse_iterator operator - (difference_type n) const; + reverse_iterator operator - (difference_type n); reverse_iterator& operator -= (difference_type n); private: Iterator advanceNStep(Iterator it, @@ -130,13 +130,13 @@ namespace TinySTL{ return *this; } template - reverse_iterator reverse_iterator::operator + (difference_type n) const{ + reverse_iterator reverse_iterator::operator + (difference_type n){ reverse_iterator res = *this; res += n; return res; } template - reverse_iterator reverse_iterator::operator - (difference_type n) const{ + reverse_iterator reverse_iterator::operator - (difference_type n){ reverse_iterator res = *this; res -= n; return res; diff --git a/TinySTL/Vector.h b/TinySTL/Vector.h index 6bcff52..866a5fa 100644 --- a/TinySTL/Vector.h +++ b/TinySTL/Vector.h @@ -7,6 +7,7 @@ #include "Allocator.h" #include "Algorithm.h" #include "Iterator.h" +#include "ReverseIterator.h" #include "UninitializedFunctions.h" namespace TinySTL{ @@ -86,6 +87,7 @@ namespace TinySTL{ public: typedef T value_type; typedef viter iterator; + typedef reverse_iterator reverse_iterator; typedef iterator pointer; typedef T& reference; typedef size_t size_type; @@ -113,6 +115,8 @@ namespace TinySTL{ //迭代器相关 iterator begin(){ return iterator(start_); } iterator end(){ return iterator(finish_); } + reverse_iterator rbegin(){ return reverse_iterator(end()); } + reverse_iterator rend(){ return reverse_iterator(begin()); } //与容量相关 difference_type size()const{ return finish_ - start_; } diff --git a/TinySTL/main.cpp b/TinySTL/main.cpp index 7727e36..fd0b458 100644 --- a/TinySTL/main.cpp +++ b/TinySTL/main.cpp @@ -1,37 +1,29 @@ #include +#include #include #include #include +#include #include #include "Vector.h" #include "Profiler\Profiler.h" +#include "ReverseIterator.h" using namespace std; -using namespace TinySTL::Profiler; +using namespace TinySTL; int main(){ + int i = 11; int *ptr = &i; + int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + //TinySTL::vector v(array, array + 9); - //std::vector vec; - ////TinySTL::vector vec; - //ProfilerInstance::start(); - //int i = 0; - //for (; i != 1000; ++i){ - // vec.push_back(std::string("zouxiaohang")); - //} - //ProfilerInstance::finish(); - //ProfilerInstance::dumpDuringTime(); - TinySTL::vector v(10, 1); - for (auto i : v){ cout << i << endl; } - cout << "size = " << v.size() << " capacity = " << v.capacity() << endl; - v.resize(9); - for (auto i : v){ cout << i << endl; } - cout << "size = " << v.size() << " capacity = " << v.capacity() << endl; - v.resize(20, -1); - for (auto i : v){ cout << i << endl; } - cout << "size = " << v.size() << " capacity = " << v.capacity() << endl; - v.push_back(0); - cout << "size = " << v.size() << " capacity = " << v.capacity() << endl; + std::vector v(array, array + 9); + TinySTL::reverse_iterator::iterator> beg(v.end()); + TinySTL::reverse_iterator::iterator> end(v.begin()); + for (auto rit = beg; rit != end; ++rit){ cout << *rit << endl; } + //TinySTL::reverse_iterator::iterator> rit(List.begin()); + system("pause"); return 0; }