Член-функция erase
За изтриване на елемент от списъка се използва член-функцията erase
. Семантиката на тази член-функция ще имитира поведението на член-функцията erase
в класа std::list
на стандартната библиотека.
iterator erase ( iterator position );
Член-функцията изтрива елемента, към който е насочен итератора position
. Функцията връща итератор, насочен към елемента, следващ изтрития елемент. Ако се изтрива последният елемент, то върнатият итератор е насочен към фиктивния елемент.
При реализиране на член-функцията erase
първо проверяваме дали в списъка има елементи и дали итератора position
е насочен към елемент на списъка. Ако списъка е празен или position
е насочен към фиктивният елемент, то функцията erase
генерира изключение.
Дефинираме указатели ptr
, prev
и next
:
ptr
– насочен към елемента, който подлежи на изтриване;prev
– предходния елемент;next
– следващият елемент.
Node* ptr=it.current_; Node* prev=it.current_->prev_; Node* next=it.current_->next_;
При изтриване на елемента ptr
трябва да свържем елементите prev
и next
след което освобождаваме паметта заемана от елемента ptr
.
Функцията връща итератор, насочен към елемента next
.
class List { ... public: ... iterator erase(iterator it) { if(empty()) { throw ListError("erase(): empty list..."); } if(it.current_==it.list_->head_) { throw ListError( "erase(): positioned on head..."); } Node* ptr=it.current_; Node* prev=it.current_->prev_; Node* next=it.current_->next_; prev->next_=next; next->prev_=prev; delete it.current_; return iterator(it.list_,next); } ... };