STL的算法函数,stl算法库中常用算法

  STL的算法函数,stl算法库中常用算法

  概述算法主要是由头文件算法、函数、数字组成,其中算法头文件最为常见

  1.常用的遍历算法对于每个和转换对于每个函数原型:for_each(迭代器求求,迭代器end,_func)

  //乞讨开始迭代器

  //结束结束迭代器

  //_func函数或者函数对象(仿函数)

  例:

  void print01(int v)

  {

  cout v

  }

  类别打印02

  {

  公共:

  空的运算符()(int c)

  {

  cout c

  }

  };

  int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  for_each(v.begin(),v.end(),print 01);//传入函数

  cout结束

  for_each(v.begin(),v.end(),print 02());//传入函数对象

  返回0;

  }

  改变函数原型:转换(迭代器beg1,迭代器end1,迭代器beg2,_func)

  //beg1源容器开始迭代器

  //end1源容器结束迭代器

  //beg2目标容器开始迭代器

  //_func函数或者函数对象

  例:

  类别打印02

  {

  公共:

  空的运算符()(int c)

  {

  cout c

  }

  };

  类别转换

  {

  公共:

  (同Internationalorganizations)国际组织运算符()(int c)

  {

  返回c;

  }

  };

  int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  向量整数

  v2。resize(v . size());

  transform(v.begin(),v.end(),v2.begin(),Transform());

  for_each(v2.begin(),v2.end(),print 02());

  cout结束

  返回0;

  }

  2.常用查找算法发现函数原型

  查找(迭代器求求,迭代器结束,值)

  //按值查找元素,找到返回指定位置的迭代器,找不到返回结束迭代器位置

  //乞讨开始迭代器

  //结束结束迭代器

  //值查找的元素

  例:

  查找自定义数据类型,要重载==运算符,这样发现函数知道该如何比较

  阶级人士

  {

  公共:

  人员(字符串名称,整数)

  {

  m _ name=名称

  m_age=年龄;

  }

  布尔运算符==(常量人p)

  {

  if(this-m _ age==p . m _ age this-m _ name==p . m _ name)

  返回真实的

  其他

  返回错误的

  }

  字符串男名

  中间年龄

  };

  int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  vector int:iterator it=find(v . begin(),v.end(),4);

  如果(它!=v.end())

  cout 找到元素: * it endl

  其他

  cout 没有找到元素恩德尔

  //查找自定义数据类型

  载体人

  人P1(‘AAA’,111);

  人p2(BBB ,222);

  人p3(ccc ,333);

  人p4(ddd ,444);

  v2。push _ back(P1);

  v2。push _ back(p2);

  v2。push _ back(P3);

  v2。push _ back(P4);

  vector Person:迭代器IT=find(v2。begin(),v2.end(),p2);

  如果(它!=v2.end())

  cout 找到元素: IT-m _ name IT-m _ age endl;

  其他

  cout 没有找到元素恩德尔

  返回0;

  }

  查找_如果函数find_if(迭代器求求,迭代器完,_Pred)

  //按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置

  //乞讨开始迭代器

  //结束结束迭代器

  //_Pred函数或者谓词(布尔类型的仿函数)类人

  {

  公共:

  人员(字符串名称,整数)

  {

  m _ name=名称

  m_age=年龄;

  }

  字符串男名

  中间年龄

  };

  类别比较

  {

  公共:

  布尔运算符()(int val)

  {

  返回值

  }

  };

  类别比较2

  {

  公共:

  布尔运算符()(个人p)

  {

  返程下午_年龄300;

  }

  };

  int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  vector int:iterator it=find _ if(v . begin()、v.end()、Compare());

  如果(它!=v.end())

  cout 找到元素: * it endl

  其他

  cout 没有找到元素恩德尔

  //查找自定义数据类型

  载体人

  人P1(‘AAA’,111);

  人p2(BBB ,222);

  人p3(ccc ,333);

  人p4(ddd ,444);

  v2。push _ back(P1);

  v2。push _ back(p2);

  v2。push _ back(P3);

  v2。push _ back(P4);

  载体人:迭代器IT=find_if(v2.begin(),v2.end(),compare 2());

  如果(它!=v2.end())

  cout 找到元素: IT-m _ name IT-m _ age endl;

  其他

  cout 没有找到元素恩德尔

  返回0;

  }

  相邻_查找函数相邻_查找(迭代器求求,迭代器结束)

  //查找相邻重复元素,返回相邻元素的第一个位置的迭代器

  //乞讨开始迭代器

  //结束结束迭代器int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  五、push _ back(10);

  vector int:iterator it=adjacent _ find(v . begin()、v . end());

  如果(它!=v.end())

  cout 找到有相邻重复元素,为: * it endl

  其他

  cout 没有找到恩德尔

  返回0;

  }

  二进制搜索函数布尔二进制搜索(迭代器求求,迭代器结束,值)

  //查找指定的元素,查到返回没错,否则错误的

  //乞讨开始迭代器

  //结束结束迭代器

  //值查找的元素

  !注意:二进制搜索函数一定是在有序序列中查找,不能在无序序列进行查找int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  bool res=binary_search(v.begin(),v.end(),4);

  中频(分辨率)

  cout 找到了恩德尔

  其他

  cout 没有找到元素恩德尔

  返回0;

  }

  数数函数计数(迭代器求求,迭代器结束,值)

  //统计元素出现次数

  //乞讨开始迭代器

  //结束结束迭代器

  //值统计的元素阶级人士

  {

  公共:

  人员(字符串名称,整数)

  {

  m _ name=名称

  m_age=年龄;

  }

  布尔运算符==(常量人p)

  {

  if (this- m_age==p.m_age)

  返回真实的

  其他

  返回错误的

  }

  字符串男名

  中间年龄

  };

  int main()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  int num=count(v.begin(),v.end(),8);

  cout 统计8的个数为:数量结束

  //统计自定义类型的个数,需要重载==运算符

  载体人

  人员p1(张飞, 35);

  人员p2(刘备,30);

  人员p3(关羽, 35);

  人员p4(孙尚香, 20);

  人员p5(孙权, 25);

  v2。push _ back(P1);

  v2。push _ back(p2);

  v2。push _ back(P3);

  v2。push _ back(P4);

  v2。push _ back(P5);

  num=count(v2.begin(),v2.end(),P1);

  cout 统计年龄和张飞一样的总人数为:数量结束

  返回0;

  }

  count_if函数count_if(迭代器求求,迭代器完,_Pred)

  //按条件统计元素出现个数

  //乞讨开始迭代器

  //结束结束迭代器

  //_Pred谓词类别比较

  {

  公共:

  布尔运算符()(int val)

  {

  返回值

  }

  };

  void test01()

  {

  向量整数

  for(int I=0;我我)

  五、推回(一);

  int num=count_if(v.begin(),v.end(),Compare());

  cout 大于四的统计个数为:数量结束

  }

  阶级人士

  {

  公共:

  人员(字符串名称,整数)

  {

  m _ name=名称

  m_age=年龄;

  }

  字符串男名

  中间年龄

  };

  类别比较2

  {

  公共:

  布尔运算符()(常量人员p)

  {

  如果(下午_年龄22)

  返回真实的

  其他

  返回错误的

  }

  };

  void test02()

  {

  载体人

  人员p1(张飞, 24);

  人员p2(刘备, 22);

  人员p3(关羽, 25);

  人员p4(孙尚香, 18);

  人员p5(狄仁杰, 20);

  v2。push _ back(P1);

  v2。push _ back(p2);

  v2。push _ back(P3);

  v2。push _ back(P4);

  v2。push _ back(P5);

  int num=count_if(v2.begin(),v2.end(),compare 2());

  cout 岁数比张飞大的人数为:数量结束

  }

  int main()

  {

  测试01();

  测试02();

  返回0;

  }

  3.常用排序算法分类函数排序(迭代器求求,迭代器完,_Pred)

  //默认排序从小到大

  //_Pred谓词作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=10;我我-)

  五、推回(一);

  sort(v.begin()、v . end());

  for_each(v.begin(),v.end(),print);

  cout结束

  sort(v.begin(),v.end(),greater int //逆序排列

  for_each(v.begin(),v.end(),print);

  }

  随机洗牌函数随机洗牌(迭代器求求,迭代器结束)

  //指定范围内的元素随机调整次序作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=10;我我-)

  五、推回(一);

  random_shuffle(v.begin()、v . end());

  for_each(v.begin(),v.end(),print);

  }

  为了改变随机数,可以加一个随机种子srand((无符号)时间(空))

  合并函数合并(迭代器beg1,迭代器end1,迭代器beg2,迭代器end2,迭代器目标)

  //两容器合并,并存储到另一容器中

  //注意:两容器必须是有序的

  //目标目标容器开始迭代器作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  向量整数

  for(int I=5;我我)

  v2。push _ back(一);

  向量整数

  v3。调整大小(10);

  merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3。begin());

  for_each(v3.begin(),v3.end(),print);

  }

  反面的函数反向(迭代器求求,迭代器结束)

  //反转指定容器的元素作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  reverse(v1.begin()、v1。end());

  for_each(v1.begin(),v1.end(),print);

  }

  4.常用拷贝和替换函数复制函数复制(迭代器求求,迭代器结束,迭代器目标)

  //将一个容器元素拷贝到另一个容器中

  //目标目标开始迭代器作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  向量整数

  v2。调整大小(5);

  copy(v1.begin(),v1.end(),v2。begin());

  for_each(v2.begin(),v2.end(),print);

  }

  替换函数替换(迭代器求求,迭代器end,oldvalue,newvalue)

  //旧值要替换的数据

  //新值替换后的数据作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  replace(v1.begin(),v1.end(),22000);//将2替换成了2000

  for_each(v1.begin(),v1.end(),print);

  }

  替换_如果函数replace_if(迭代器求求,迭代器end,_Pred,新价值)

  //_Pred谓词,满足条件的数据被替换成新价值

  作废打印(中间值)

  {

  cout val

  }

  类别比较

  {

  公共:

  布尔运算符()(int val)

  {

  返回值

  }

  };

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  cout 替换前:;

  for_each(v1.begin(),v1.end(),print);

  replace_if(v1.begin(),v1.end(),Compare(),3000);//大于3的数据被替换成3000

  cout endl 替换后:;

  for_each(v1.begin(),v1.end(),print);

  }

  交换函数交换(容器c1,容器c2)

  //交换两个容器的元素作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量int v1,v2;

  for(int I=0;我我)

  v1.push_back(i),v2。push _ back(I * 2);

  cout 交换前: endl

  for_each(v1.begin(),v1.end(),print);

  cout结束

  for_each(v2.begin(),v2.end(),print);

  swap(v1,v2);

  cout endl 交换后: endl

  for_each(v1.begin(),v1.end(),print);

  cout结束

  for_each(v2.begin(),v2.end(),print);

  cout结束

  }

  5.常用算术生成函数这类算法属于小型算法,使用时要包含头文件数字的

  积聚函数累加(迭代器求求,迭代器结束,值)

  //计算容器元素累计总和

  //值起始值作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  for(int I=0;我我)

  v1。push _ back(一);

  int total=accumulate(v1.begin(),v1.end(),0);

  cout total= total endl

  }

  充满函数填充(迭代器求求,迭代器结束,值)

  //向容器中填充元素

  //值填充的值作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量整数

  v1。调整大小(10);

  //后期填充

  fill(v1.begin(),v1.end(),1000);

  for_each(v1.begin(),v1.end(),print);

  }

  6.常用集合函数集合_交集函数集合_交集(迭代器beg1,迭代器end1,迭代器beg2,迭代器end2,迭代器目标)

  //求两个集合的交集(注意!这两个集合的元素必须是有序的)

  //beg1容器一开始迭代器

  //end1容器一结束迭代器

  //beg2容器2开始迭代器

  //end2容器2结束迭代器

  //目标目标容器开始迭代器作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量int v1,v2,v3;

  for(int I=0;我我)

  v1。push _ back(一);

  for(int I=0;我我)

  v2。push _ back(一);

  v3.resize(min(v1.size()、v2。size());

  vector int:iterator it=set _ intersection(v1。begin(),v1.end(),v2.begin(),v2.end(),v3。begin());

  for_each(v3.begin(),it,print);

  }

  集合_联合函数set_union(迭代器beg1,迭代器end1,迭代器beg2,迭代器end2,迭代器目标)

  //求两个集合的并集(注意!两个集合必须是有序的)

  //目标目标容器开始迭代器

  //目标容器开辟空间需要两个容器相加

  //集_联合返回值是并集中最后一个的位置作废打印(中间值)

  {

  cout val

  }

  void test01()

  {

  向量int v1,v2,v3;

  for(int I=0;我我)

  v1。push _ back(一);

  for(int I=0;我我)

  v2。push _ back(一);

  v3。调整大小(v1。大小()v2。size());

  vector int:iterator it=set _ union(v1。begin(),v1.end(),v2.begin(),v2.end(),v3。begin());

  for_each(v3.begin(),it,print);

  }

  集合_差异函数set_difference(迭代器beg1,迭代器end1,迭代器beg2,迭代器end2,迭代器目标)

  //求两个集合的差集(注意!这两个集合必须是有序序列)

  //目标容器开始迭代器

  //目标容器需要从两个容器中取最大值来打开空间。

  //set_difference的返回值是差集void print(int val)中最后一个元素的位置

  {

  cout val“”;

  }

  void test01()

  {

  向量int v1,v2,v3;

  for(int I=0;我我)

  v1 . push _ back(I);

  for(int I=10;我我)

  v2 . push _ back(I);

  v3.resize(max(v1.size()、v2 . size());

  vector int:iterator it=set _ difference(v1 . begin(),v1.end(),v2.begin(),v2.end(),v3 . begin());

  cout v1和v2的差异集:;

  for_each(v3.begin(),it,print);

  it=set_difference(v2.begin(),v2.end(),v1.begin(),v1.end(),v3 . begin());

  couendl v2和v1之间的差异:;

  for_each(v3.begin(),it,print);

  }

  版权归作者:别跑Ang,,请联系作者获得转载许可,否则将承担法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: