forward_lsit的erase操作为什么是删除指定的迭代器之后的元素
问题描述:在forward_list的这个容器中,没有erase接口,只提供了erase_after这个接口。其中erase _after(p)为删除迭代器p指向的位置之后的一个元素。那么为什么不能直接删除当前迭代器指向的元素呢。
首先找到STL中slist.h,可以看到
iterator erase_after(iterator __pos) {return iterator((_Node*) this->_M_erase_after(__pos._M_node));}
于是转到相应的函数
_Slist_node_base* _M_erase_after(_Slist_node_base* __pos){_Slist_node<_Tp>* __next = (_Slist_node<_Tp>*) (__pos->_M_next);_Slist_node_base* __next_next = __next->_M_next;__pos->_M_next = __next_next;destroy(&__next->_M_data);_M_put_node(__next);return __next_next;}
这段代码大概的意思就是
// 伪代码
node* next = cur->next;
node* next_next = next->next;
delete(next);
cur->next = next_next
也就是说,为了保持list的连接,需要知道当前被删除的节点的前驱,如果直接删除当前节点,也就是erase(p),连接性就被破坏了。当然,也可以在设计迭代器时定义一个prev变量保存当前迭代器的前驱(逃)。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
