遍历中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(); ) //
C++语言用于竞赛真的是非常方便的,里面有很多函数还有STL这个好东西,比C语言方便,比其他语言好理解。
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语言方便,比其他语言好理解。
相关文章
- Java之五种遍历Map集合的方式
- python dictionary的遍历
- C++-STL-vector:vector遍历的几种方法
- UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
- 通过java遍历文件夹的文件并通过条件筛选
- 树的非递归遍历
- 0083-Go-range 遍历
- LeetCode_螺旋遍历_中等_54.螺旋矩阵
- 喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
- LeetCode·106.从中序与后序遍历序列构造二叉树·递归
- LeetCode·每日一题·919.完全二叉树插入器·层次遍历·BFS
- MySQL存储过程-遍历游标的例子
- 高级数据结构 | 二叉树遍历 —非递归遍历,判断结点引用次数进行优先深度遍历 ...
- 【力扣】二叉树的分层遍历1和2