From e52bbfce707a117a73d81ff86b6982299fcc740c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Fri, 10 Oct 2014 14:35:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TinySTL/String.h | 87 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/TinySTL/String.h b/TinySTL/String.h index a2346f8..d951390 100644 --- a/TinySTL/String.h +++ b/TinySTL/String.h @@ -81,6 +81,7 @@ namespace TinySTL{ char& front(){ return *(start_); } const char& front() const{ return front(); } + void push_back(char c){ insert(end(), c); } string& insert(size_t pos, const string& str); string& insert(size_t pos, const string& str, size_t subpos, size_t sublen = npos); string& insert(size_t pos, const char* s); @@ -90,18 +91,26 @@ namespace TinySTL{ iterator insert(iterator p, char c); template iterator insert(iterator p, InputIterator first, InputIterator last); + string& append(const string& str); + string& append(const string& str, size_t subpos, size_t sublen = npos); + string& append(const char* s); + string& append(const char* s, size_t n); + string& append(size_t n, char c); + template + string& append(InputIterator first, InputIterator last); + string& operator+= (const string& str); + string& operator+= (const char* s); + string& operator+= (char c); - string& operator+= (const string& str){ - insert(size(), str); - return *this; - } - string& operator+= (const char* s){ - insert(size(), s); - return *this; - } - string& operator+= (char c){ - insert(end(), c); - return *this; + void pop_back(){ erase(end() - 1, end()); } + string& erase(size_t pos = 0, size_t len = npos); + iterator erase(iterator p); + iterator erase(iterator first, iterator last); + + void swap(string& str){ + std::swap(start_, str.start_); + std::swap(finish_, str.finish_); + std::swap(endOfStorage_, str.endOfStorage_); } private: //插入时空间不足的情况 @@ -137,7 +146,8 @@ namespace TinySTL{ dataAllocator::destroy(start_, finish_); dataAllocator::deallocate(start_, endOfStorage_ - start_); } - }; + };// end of string + const size_t string::npos; string::string(size_t n, char c){ @@ -293,5 +303,58 @@ namespace TinySTL{ string::iterator string::insert(iterator p, char c){ return insert(p, 1, c); } + string& string::operator+= (const string& str){ + insert(size(), str); + return *this; + } + string& string::operator+= (const char* s){ + insert(size(), s); + return *this; + } + string& string::operator+= (char c){ + insert(end(), c); + return *this; + } + string& string::append(const string& str){ + (*this) += str; + return *this; + } + string& string::append(const string& str, size_t subpos, size_t sublen){ + insert(size(), str, subpos, sublen); + return *this; + } + string& string::append(const char* s){ + (*this) += s; + return *this; + } + string& string::append(const char* s, size_t n){ + insert(size(), s, n); + return *this; + } + string& string::append(size_t n, char c){ + insert(end(), n, c); + return *this; + } + template + string& string::append(InputIterator first, InputIterator last){ + insert(end(), first, last); + return *this; + } + string::iterator string::erase(iterator first, iterator last){ + size_t lengthOfMove = finish_ - last; + for (auto i = 0; i != lengthOfMove; ++i){ + *(first + i) = *(last + i); + } + dataAllocator::destroy(first + lengthOfMove, finish_); + finish_ = first + lengthOfMove; + return first; + } + string& string::erase(size_t pos, size_t len){ + erase(begin() + pos, begin() + pos + len); + return *this; + } + string::iterator string::erase(iterator p){ + return erase(p, end()); + } } #endif \ No newline at end of file