坑 - stl之删除元素

  • 概述

stl中删除元素,会使用到erase或remove,erase一般用于删除一个或者一段范围内的元素,而remove则可以删除指定值的所有元素。但是在使用remove时会有一些需要注意的地方,不细心的话容易掉坑里,故记录在此。

  • remove的原型
template <class ForwardIterator, class T>
  ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);

参数:

[first, last)规定了被操作的范围,其中不包含last边界;

val表示要被删除的值。

  • 示例

输出如下↓↓↓↓↓

  • 解析

执行remove后:

1>、返回值为最后一个未被删除的元素的下一个位置;

2>、原始vector的size未变化;

3>、可以看出remove操作仅仅将后续有效数据往前移动到自由位置,具体算法如下↓↓↓↓

原文地址:https://www.cnblogs.com/letsgollc/p/8337318.html

时间: 2024-11-05 18:42:35

坑 - stl之删除元素的相关文章

STL容器删除元素的陷阱

今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector<struct> mFriendList;...std::vector<struct>::iterator iter = mFriendList.begin();for ( ; iter != mFriendList.end(); ++iter){    if (...)        mFr

STL进阶--删除元素

删除元素 从vector或deque删除元素 vector<int> vec = {1, 4, 1, 1, 1, 12, 18, 16}; // 删除所有的1 for (vector<int>::iterator itr = vec.begin(); itr != vec.end(); ++itr) { if ( *itr == 1 ) { vec.erase(itr); //你或许会想到使用erase成员函数 } } // 的确,是可以达到目的 vec: { 4, 12, 18,

STL容器遍历时删除元素

STL容器遍历时在循环体内删除元素最容易出错了,根本原因都是因为迭代器有效性问题,在此记下通用删除方法,该方法适用于所有容器: 1 std::vector<int> myvec; 2 3 std::vector<int>::iterator it = myvec.begin(); 4 while( it != myvec.end()) 5 { 6 it = myvec.erase(it); 7 } 容器list有个比较另类的删除方法,如下代码所示: std::list<int

STL中用erase()方法遍历删除元素?.xml

pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9;font-style:italic;font-weight:bold;} .selfFuc{color:#f1f9be;} .bool{color:#69305e;} .condition{color:#628698;font-weight:bold;} .key{color:#e336b6;} .

STL中慎重选择删除元素的方法

 一.要删除容器中有特定值的所有对象 1.如果容器是vector.string或deque,则使用erase-remove习惯用法.例如: vector<int> c; c.erase(remove(c.begin(),c.end(),1963),c.end());//删除值是1963的元素 下面讲一下算法remove: template<classForwardIterator,class T> ForwardIteratorremove(ForwardIterator fi

STL 中 使用迭代器删除元素的问题

在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. 1 for(auto iter = v.begin(), iter!=v.end(); iter++) 2 { 3 if(iter == 3) 4 v.erase(iter); 5 } 因此vector中正确的删除的方法是: for(auto iter = v.begin(), iter!=v.end(); /*iter++*/) {

STL容器之 元素删除

stl容器的元素删除跟具体的按内存分配方式关系密切.按内存分配方式可以分为节点内存容器和连续内存容器. 节点内存容器指的是一种表现方式,包括list.slist等这样基于节点的容器(链表实现)和set.map.multiset.multimap等关联容器(平衡树实现) 连续内存容器指的是在一块连续的内存上保存元素的连续内存容器,比如vector等. 1.节点内存容器 以list为例,当调用erase函数之后,被删除的元素的迭代器将会失效,则需要在删除之前移动迭代器,并传入原来迭代器的拷贝作为er

怎么删除STL容器的元素

在STL容器有顺序容器和关联容器两种. 顺序容器删除元素的方法有两种: 1.c.erase(p) 从c中删除迭代器p指定的元素.p必须指向c中一个真实元素,不能等于c.end().返回一个指向p之后元素的迭代器,若p指向c中的尾元素,则返回c.end() 2.3.c.erase(b,e) 删除迭代器对b和e所代表的范围中的元素.返回e 关联容器删除元素的方法有三种: 1.c.erase(k) 从c中删除每一个关键字为k的元素.返回一个size_type值,指出删除的元素的数量. 2.c.eras

STL——遍历 删除 set 元素

==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明作者和出处,并保证文章(包括本声明)的完整性. 未经作者授权请勿修改(包括本声明),保留法律追究的权利. 未经作者授权请勿用于学术性引用. 未经作者授权请勿用于商业出版.商业印刷.商业引用以及其他商业用途. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文链接:http://www.c