码迷,mamicode.com
首页 > 其他好文 > 详细

erase

时间:2014-11-13 14:15:20      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:des   blog   io   os   使用   sp   for   div   on   

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

标签:des   blog   io   os   使用   sp   for   div   on   

原文地址:http://www.cnblogs.com/kangbry/p/4094623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!