From 08aa19c0694a0bb92c02a494c0a34d0be918e2bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Wed, 26 Nov 2014 15:00:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90List=E7=9A=84=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TinySTL/List.h | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/TinySTL/List.h b/TinySTL/List.h index f4c386e..27d8ca9 100644 --- a/TinySTL/List.h +++ b/TinySTL/List.h @@ -130,8 +130,8 @@ namespace TinySTL{ void insert(iterator position, size_type n, const value_type& val); template void insert(iterator position, InputIterator first, InputIterator last); - //iterator erase(iterator position); - //iterator erase(iterator first, iterator last); + iterator erase(iterator position); + iterator erase(iterator first, iterator last); //void swap(List& x); //void clear(); //void splice(iterator position, list& x); @@ -224,6 +224,28 @@ namespace TinySTL{ void List::insert(iterator position, InputIterator first, InputIterator last){ insert_aux(position, first, last, typename std::is_integral::type()); } + template + typename List::iterator List::erase(iterator position){ + if (position == head){ + pop_front(); + return head; + }else{ + auto prev = position.p->prev; + prev->next = position.p->next; + position.p->next->prev = prev; + deleteNode(position.p); + return iterator(prev->next); + } + } + template + typename List::iterator List::erase(iterator first, iterator last){ + typename List::iterator res; + for (; first != last; ){ + auto temp = first++; + res = erase(temp); + } + return res; + } } #endif \ No newline at end of file