• remove(first, last, value) 函数移除[first, last) 范围的 value,返回新值范围的尾后迭代器

在头文件 <algorithm>中,声明如下

template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );//first,last都是迭代器,value是值或对象,返回新值范围的尾后迭代器

  使用方法如下

    vector<int> a = {11, 0, 2, 3, 10, 0, 0, 8, 0};cout << "Original size : " << a.size() << endl;auto itend = remove(a.begin(), a.end(), 0);cout << "after REMOVE, size : " << a.size() << endl;for (auto it = a.begin(); it != a.end(); ++it){cout << *it << " ";}cout << endl;//结果:11 2 3 10 8 0 0 8 0//可以这么理解,把所以非value的值都向前移动,数组的大小不变,尾部剩下的部分值不变。//remove并没有真正删除元素value,而是返回新值范围的尾后迭代器。//可以用erase配合删除a.erase(itend, a.end());// 若想删除value值可以直接 a.erase(remove(a.begin(), a.end(), value), a.end());for (int& k : a ){cout << k << " ";}cout << endl;// 结果:11 2 3 10 8

  • remove_if() 函数
template< class ForwardIt, class UnaryPredicate >
ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p );
//从范围 [first, last) 移除所有满足特定判别标准的元素,并返回新值范围的尾后迭代器。

  使用如下

    vector<int> a = {11, 0, 2, 3, 10, 0, 0, 8, 0};cout << "Original size : " << a.size() << endl;
//    auto itend = remove_if(a.begin(), a.end(), bind2nd(greater<int>(),9));//移除大于9的数auto itend = remove_if(a.begin(), a.end(), [](int i){return i>9;});//也可以用 lambda 表达式,或者写一个bool类型的函数,将函数名做第三个参数。cout << "after REMOVE, size : " << a.size() << endl;for (auto it = a.begin(); it != a.end(); ++it){cout << *it << " ";}cout << endl;//结果:0 2 3 0 0 8 0 8 0//同样的把不满足条件的数向前移动,数组大小不变,尾部剩下的值不变。返回新值范围的尾迭代器。a.erase(itend, a.end());for (int& k : a ){cout << k << " ";}cout << endl;

  另外,在<algorithm>头文件中,还有count() 函数与 count_if() 函数用法和上面的相似。find() 与 find_if()

  • count(first, last, value)

其中,first和last 是迭代器或指针,表示范围 [first, last),value是一个值或对象。返回[first, last)中等于value的元素数。

  • count_if(first, last, p)

其中,first和last 是迭代器或指针,表示范围[first, last),p是一元谓词,可以是函数对象,返回bool类型的函数名(即函数指针),lambda 表达式。返回满足p条件的元素数

  • find(first, last, value)

返回 [first, last) 范围内第一个等于value的元素的迭代器。若没有找到,则返回 last。

  • find_if(first, last, p)

返回 [first, last) 范围内第一个满足p的条件的元素的迭代器。若没有找到,则返回 last。

p是一元谓词,可以是函数对象,返回bool类型的函数名(即函数指针),lambda 表达式。

  • replace() 与 replace_if()
template< class ForwardIt, class T >
void replace( ForwardIt first, ForwardIt last,const T& old_value, const T& new_value );  //在[first,last)范围,把所有的old_value替换为new_value。返回voidtemplate< class ForwardIt, class UnaryPredicate, class T >
void replace_if( ForwardIt first, ForwardIt last,UnaryPredicate p, const T& new_value ); //在[first,last)范围,把所有的满足p条件的元素替换为new_value。返回void

  • reverse(begin,end)

Reverses the order of the elements in the range [first,last).颠倒顺序

 std::vector<int> myvector;for (int i=1; i<10; ++i) myvector.push_back(i);   // 1 2 3 4 5 6 7 8 9std::reverse(myvector.begin(),myvector.end());    // 9 8 7 6 5 4 3 2 1

  

转载于:https://www.cnblogs.com/htj10/p/9296597.html

algorithm头文件中的函数:remove()与remove_if() 函数,……相关推荐

  1. algorithm头文件函数全集——史上最全,最贴心

    2022.4.8更: 随着本篇博客观看次数越来越多,假如有一点点疏忽,就可能造成更大的影响, 因此采取动态维护的策略: 从今天开始,每天我会检查评论区, 及时解答大家的疑问,修改可能存在的问题 如果哪 ...

  2. stdio.h头文件中申明的基本函数

    stdio.h头文件中申明的基本函数 调用scanf函数时,需传入变量的地址作为参数,scanf函数会等待标准输入设备(键盘等)输入数据,并且将输入的数据赋值给地址对应的变量. #include< ...

  3. C++中头文件中定义的变量

    1.在头文件.h中定义static变量,如: static int x;其实就等效于每个引用该头文件的源文件中,定义一个变量名为x的整型静态全局变量,每个文件中的x变量均属于本源文件,各文件中的互不相 ...

  4. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

  5. algorithm头文件下函数整合

    使用algorithm头文件,在头文件下加一行"using namespace std:"才能正常使用 1.max(x,y).min(x,y).abs(x) 分别返回最大值.最小值 ...

  6. algorithm头文件下的常用函数-学习笔记

    algorithm头文件下的常用函数-学习笔记 max(x,y),min(x,y),abs(x) swap(x,y) reverse(it,it2) next_permutation() fill( ...

  7. algorithm头文件下常用函数

    algorithm头文件下常用函数 1.max(),min(),abs() 应用:max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须是两个. abs(x) 返回x的绝对值. ...

  8. c语言algorithm头文件,C++ algorithm头文件函数的基本用法

    algorithm /*algorithm头文件下的常用函数*/ /* 使用algorithm头文件,需要在头文件下加一行using namespace std;" */ //常用函数max ...

  9. C++STL中string的头文件中的常用函数

    文章目录 STL简介 头文件 初始化操作 实现效果 基本函数 1.size,length,capacity 2.resize,reserve 1,2的实现代码 实现效果 3.at,append,ins ...

  10. 将函数实现放在头文件中

    研究一个开源算法库,采用C++模板编程,所有函数实现都放在了头文件中,现在把模板去掉,链接时发生冲突,具体原因如下: 因为多个源文件包含了含有函数定义的头文件,在编译的时候,每个源文件都会包含一份函数 ...

最新文章

  1. Django 框架篇: 一. Django介绍; 二. 安装; 三. 创建项目;
  2. Fluent NHibernate关系映射
  3. oracle怎样查询某用户下的所有表的表名
  4. 如何进入游戏行业_进入设计行业
  5. 【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)
  6. corosync+openais+pacemaker+web
  7. 网络(11)-什么是RestFul风格?
  8. element ui el-carousel 滚动图 vue 基于vue-lazyload图片懒加载、延迟加载 解决方案
  9. 湖南城市学院计算机题库和答案,湖南城市学院 计算机选择题题库
  10. 小莫微信影视机器人-自定义对接影视教程
  11. Linux_ppc下软件包安装,LINUX2000PPC安装手册
  12. 太极root权限_太极iOS 8.4完美越狱曝安全隐患:Root权限易获取
  13. 高清数字电视视频处理器画质增强技术简介
  14. h5禁用浏览器下载视频_h5中利用canvas绘制video 忽略浏览器自带视频播放控件
  15. ftp上传软件,五款ftp优秀的ftp上传软件
  16. 软考高项你想要的全在这
  17. U盘装系统教程,一键安装和U盘安装的区别
  18. 本地文件共享到云服务器,本地和云服务器文件共享
  19. Python模拟二维码登录百度
  20. TCP连接的建立和释放过程详解(三次握手、四次挥手)

热门文章

  1. URTracker 试用不过期修改方法
  2. 简单的方法完成项目上传到github
  3. laravel上传文件到s3,打开链接无法下载而是直接在浏览器中显示内容
  4. vue中html没引入js文件,vue.js如何引入非模块化的js文件并调用里面的方法和类。...
  5. qca9377linux无线驱动,ubuntu下安装无线网卡去驱动Qualcomm-Atheros-QCA9377
  6. 植树问题python_《程序员的数学》思考题(一)
  7. 亲身经历:2018年深圳保洁员工资时薪75,月薪不清楚
  8. WORD中输入已知编码的特殊字符
  9. Freeswitch拨号响应太慢的解决办法
  10. 自己SSD近来经常掉盘,一看这一段时间SSD涨价很多啊