From 89ccf218d1cdcac65427c90bb3f5753f70ab6ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Mon, 13 Oct 2014 10:31:25 +0800 Subject: [PATCH] bug fix --- TinySTL/ReverseIterator.h | 2 +- TinySTL/Vector.h | 19 ++++++++++++++----- TinySTL/main.cpp | 33 ++++++++++++++++++++++----------- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/TinySTL/ReverseIterator.h b/TinySTL/ReverseIterator.h index 1fe42aa..71a5424 100644 --- a/TinySTL/ReverseIterator.h +++ b/TinySTL/ReverseIterator.h @@ -21,7 +21,7 @@ namespace TinySTL{ public: //构造。复制,析构相关 reverse_iterator() :base_(0), cur_(0){} - explicit reverse_iterator(iterator_type it) :base_(it), cur_(it - 1){} + explicit reverse_iterator(const iterator_type& it) :base_(it), cur_(it - 1){} template reverse_iterator(const reverse_iterator& rev_it){ base_ = (iterator_type)rev_it.base(); diff --git a/TinySTL/Vector.h b/TinySTL/Vector.h index dd99bd8..7b1f2c6 100644 --- a/TinySTL/Vector.h +++ b/TinySTL/Vector.h @@ -37,9 +37,9 @@ namespace TinySTL{ 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){ 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){ 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; } difference_type operator - (const viter& vit)const{ return (ptr_ - vit.ptr_); } @@ -89,9 +89,12 @@ namespace TinySTL{ public: typedef T value_type; typedef viter iterator; - typedef reverse_iterator> reverse_iterator; + typedef const viter const_iterator; + typedef reverse_iterator 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; public: @@ -116,9 +119,15 @@ namespace TinySTL{ //迭代器相关 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_); } - reverse_iterator rbegin(){ return reverse_iterator(end()); } - reverse_iterator rend(){ return reverse_iterator(begin()); } + const_iterator end()const{ return const_iterator(finish_); } + const_iterator cend()const{ return const_iterator(finish_); } + reverse_iterator rbegin(){ return reverse_iterator(finish_); } + const_reverse_iterator crbegin(){ return const_reverse_iterator(finish_); } + reverse_iterator rend(){ return reverse_iterator(start_); } + const_reverse_iterator crend(){ return const_reverse_iterator(start_); } //与容量相关 difference_type size()const{ return finish_ - start_; } diff --git a/TinySTL/main.cpp b/TinySTL/main.cpp index ace2624..c2fc2d8 100644 --- a/TinySTL/main.cpp +++ b/TinySTL/main.cpp @@ -17,20 +17,31 @@ #include "Vector.h" #include "Profiler\Profiler.h" +#include "Queue.h" + using namespace TinySTL::Profiler; - +class mycomparison +{ + bool reverse; +public: + mycomparison(const bool& revparam = false) + { + reverse = revparam; + } + bool operator() (const int& lhs, const int&rhs) const + { + if (reverse) return (lhs>rhs); + else return (lhs myvector(array, array+5); - std::cout << "Please, enter your full name: "; - TinySTL::getline(std::cin, name,'i'); - //std::getline(std::cin, name); - std::cout << name << "\n"; + std::cout << "myvector backwards:"; + for (auto rit = myvector.crbegin(); rit != myvector.crend(); ++rit) + std::cout << ' ' << *rit; + std::cout << '\n'; system("pause"); return 0; }