遍历中stl erase 的使用

简介: 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方法也会返回下一个有效的迭代器,因此,以上两种方法都可以使用。

相关文章
|
3月前
|
算法 编译器 C++
|
5月前
|
算法 C++ 容器
STL迭代器
STL迭代器
26 0
|
4月前
|
C++
【STL】:反向迭代器
【STL】:反向迭代器
26 0
|
8月前
【C++STL】list的反向迭代器
【C++STL】list的反向迭代器
31 0
|
10月前
|
C++ 容器
C++【STL】之反向迭代器
C++ STL 反向迭代器设计思想和模拟实现详细讲解,干货满满!
88 0
C++【STL】之反向迭代器
|
安全 容器
别被vector最后一个元素erase错误
别被vector最后一个元素erase错误
120 0
别被vector最后一个元素erase错误
|
C++
旋转数组STL(reverse)
题目: 给定一个数组,将数组向右移动k步,其中k为非负数。 样例:
65 0
|
算法 C++
STL 常用遍历算法 for_each()
STL 常用遍历算法 for_each()
STL 常用遍历算法 for_each()
|
算法 容器
迭代器理解(以vector迭代器举例)
迭代器理解(以vector迭代器举例)
85 0