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

相关文章
|
7月前
|
算法 编译器 C++
|
算法 C++ 容器
STL迭代器
STL迭代器
44 0
|
6月前
|
编译器 C语言 C++
C++ STL中list迭代器的实现
C++ STL中list迭代器的实现
C++ STL中list迭代器的实现
|
7月前
|
C++
【STL】:反向迭代器
【STL】:反向迭代器
48 0
【C++STL】list的反向迭代器
【C++STL】list的反向迭代器
73 0
|
C++ 容器
C++【STL】之反向迭代器
C++ STL 反向迭代器设计思想和模拟实现详细讲解,干货满满!
137 0
C++【STL】之反向迭代器
|
安全 容器
别被vector最后一个元素erase错误
别被vector最后一个元素erase错误
182 0
别被vector最后一个元素erase错误
|
算法 C++
STL 常用遍历算法 for_each()
STL 常用遍历算法 for_each()
STL 常用遍历算法 for_each()
|
存储 C++ 容器
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。
2270 0