首页 > 代码库 > erase
erase
vector(deque)是一个顺序容器,erase后,后面的元素自动前移,后面所有迭代器失效(地址前移)
对顺序容器的erase正确操作方法是使用erase的返回值,erase返回被删元素的下一个元素地址。
iterator erase(iterator __position) { if (__position + 1 != end()) copy(__position + 1, _M_finish, __position); --_M_finish; destroy(_M_finish); return __position; }
for(; iter != vec.end(); ) // iter: 0x0a3642d8 end(): 0x0a3642dc { if(//条件为真) { iter = vec.erase(iter); // iter: 0x0a3642d8 end():0x0a3642d8 } else { ++iter; } }
对关系容器的erase可以使用使用后置++的方法进行。因为此类采用红黑树实现,插入删除一个节点不会对其它节点产生影响。
传给erase的是iter的一个副本,void erase(iterator __pos),iter++会指向下一个元素
void erase(iterator __position) { _M_t.erase(__position); }
for(; iter != _map.end(); ) { if(//条件为真) { _map.erase(iter++); } else { ++iter; } }
对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的迭代器,因此,以上两种方法都可以使用。
iterator erase(iterator __position) { _List_node_base* __next_node = __position._M_node->_M_next; _List_node_base* __prev_node = __position._M_node->_M_prev; _Node* __n = (_Node*) __position._M_node; __prev_node->_M_next = __next_node; __next_node->_M_prev = __prev_node; _Destroy(&__n->_M_data); _M_put_node(__n); return iterator((_Node*) __next_node); }
erase
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。