STL的算法函数,c++ stl算法

  STL的算法函数,c++ stl算法

  最近用了STL的泛型算法remove_if。我读了MSDN好几遍,但我就是不明白这个功能的真正含义。嗯,其实我的英语老师教体育-!后来看了STL源代码,发现了其中的玄机。在这里,我可以做一个笔记来打动自己。我还是会用MSDN的例子来说明。

  int larger 6(int value){

  返回值

  移除了满足大于6的元素的“cout”向量v1是\ n(;

  for(ITER 1=v1 . begin();Iter1!=v1 . end();Iter1)

  cout * ITER 1“”;

  cout)). endl

  //要更改序列大小,请使用erase

  v1.erase (new_end,v1 . end());

   cout Vector v1已调整大小的元素满足移除的更大值6是\ n(;

  for(ITER 1=v1 . begin();Iter1!=v1 . end();Iter1)

  cout * ITER 1“”;

  cout)). endl

  }

  Remove_if有三个参数,前两个参数是需要操作的迭代器区间,第三个参数是函数指针,它的作用是作为移除哪些元素的选择条件。看remove_if的源代码,我们知道它首先调用一个find_if算法,找到第一个满足移除条件的元素,并返回那个元素的迭代器。然后调用unchecked_remove_copy_if算法函数,类似remove_copy_if,但实际上是内部调用remove_copy_if。

  下面是伪代码:

  remove_if(itr_begin,itr_end,funPtr)

  itr_find=find_if(itr_begin,itr_end,funPtr);

  itr _ begin=itr _ find

  unchecked _ remove _ copy _ if(itr_begin,itr_end,itr _ begin,funPtr);

  }

  下面给出了remove_copy_if的伪代码实现。

  remove_copy_if(_First,_Last,_Dest,funPtr)

  for(;_第一!=_ Last_First)

  如果(!funPtr(*_First))

  * _ Dest=* _ First

  return(_ Dest);

  }

  从源代码的实现可以看出,它是从第一个满足移除条件的元素开始遍历到容器的末尾。当检查到一个元素不满足移除条件时,它将被第一个满足移除条件的元素替换。

  以下是示例代码中remove_copy_if每次循环的结果:

  (好像排版有问题。当执行第一个循环时,迭代器D指向元素7,F指向元素9。)

  1 1,7,9,2,0,7,7,3,4,6,8,5结束

  2 1,2,9,2,0,7,7,3,4,6,8,5结束

  3 1,2,0,2,0,7,7,3,4,6,8,5结束

  4 1,2,0,2,0,7,7,3,4,6,8,5结束

  5 1,2,0,2,0,7,7,3,4,6,8,5结束

  6 1,2,0,2,0,7,7,3,4,6,8,5结束

  7 1,2,0,3,0,7,7,3,4,6,8,5结束

  科技新词汇

  8 1,2,0,3,4,7,7,3,4,6,8,5结束

  9 1,2,0,3,4,6,7,3,4,6,8,5结束

  科技新词汇

  10 1,2,0,3,4,6,7,3,4,6,8,5结束

  科技新词汇

  11 1,2,0,3,4,6,5,3,4,6,8,5结束

  科技新词汇

  在11个循环遍历结束时,容器v1中的元素现在是步骤11中的元素的顺序。1,2,0,3,4,6,5后面的元素是我在看源代码之前很困惑的。知道了源代码之后,我清楚地知道了下面的元素(3,4,6,8,5)是从哪里来的。Remove_if不改变容器的大小。它的返回值是一个迭代器,指向所有满足移除条件的元素的第一个元素,也就是这里的第二个3。一般remove_if和容器的erase方法一起使用,所以我调用v1.erase(newEnd,v1.end)方法后,v1中剩余的元素排列如下:1,2,0,3,4。

  与remove_if算法类似的函数有:

  remove方法的第三个参数传入一个常数,这意味着要移除指定的常数值。

  remove_copy_if方法可以通过第三个参数将移除的结果转移到另一个容器中。当然,这个容器必须足够大,才能装下一个元素,否则后果会很严重。

郑重声明:本文由网友发布,不代表盛行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各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: