zl程序教程

您现在的位置是:首页 >  后端

当前栏目

遍历中stl erase 的使用

遍历 STL 使用
2023-09-27 14:24:59 时间
vector(deque)是一个顺序容器,erase后,后面的元素自动前移,后面所有迭代器失效(地址前移) 对顺序容器的erase正确操作方法是使用erase的返回值,erase返回被删元素的下一个元素地址。  // 假设vec中只存放一个值 iterator container::erase(iterator pos) for(; iter != vec.end(); ) //

vector(deque)是一个顺序容器,erase后,后面的元素自动前移,后面所有迭代器失效(地址前移)

对顺序容器的erase正确操作方法是使用erase的返回值,erase返回被删元素的下一个元素地址。

 // 假设vec中只存放一个值

iterator container::erase(iterator pos)

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 container::erase(iterator pos)

for(; iter != _map.end(); )

{ if(//条件为真) 

 _map.erase(iter++); 

 else 

 ++iter; 


对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的迭代器,因此,以上两种方法都可以使用。


C++语言用于竞赛真的是非常方便的,里面有很多函数还有STL这个好东西,比C语言方便,比其他语言好理解。