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