STL中有11个算法名字包含"copy":

copy
copy_backward
replace_copy
reverse_copy
replace_copy_if
unique_copy
remove_copy
rotate_copy
remove_copy_if
partial_sort_copy
unitialized_copy
但是STL中却不包括copy_if的实现,如果需要它,必须自己实现。
下面是copy_if的正确实现:

template<typename InputIterator, typename OutputIterator, typename Predicate>
OutputIterator copy_if(InputIterator begin, InputIterator end, OutputIterator destBegin, Predicate p)
{while (begin != end){if (p(*begin)) *destBegin++ == *begin;++begin;}return destBegin;
}

下面是SGI STL中copy算法的实现:

template <class _InputIter, class _OutputIter, class _Distance>
inline _OutputIter __copy(_InputIter __first, _InputIter __last, _OutputIter __result, input_iterator_tag, _Distance*)
{for (; __first != __last; ++__result, ++__first)*__result = *__first;return __result;
}template <class _RandomAccessIter, class _OutputIter, class _Distance>
inline _OutputIter __copy(_RandomAccessIter __first, _RandomAccessIter __last, _OutputIter __result, random_access_iterator_tag, _Distance*)
{for (_Distance __n = __last - __first; __n > 0; --__n) {*__result = *__first;++__first;++__result;}return __result;
}

注意,copy、copy_if算法中都没有对__result进行有效性判断(也不法进行判断), 所以调用方必须确保目标位置__result有效,否则会出现未定义行为。

14.理解copy_if算法的正确实现相关推荐

  1. 第3章 感受(一)——3.14. Hello STL 算法篇

    [回到目录] 白话C++ 3.14. Hello STL 算法篇 前一小节,在输出成绩时,我们从students中得到每个学生的学号,然后,通过for循环,在一个list中查找符合"学号等于 ...

  2. 从头到尾理解KMP算法

    转自http://saturnman.blog.163.com/blog/static/5576112010969957130/ KMP算法解决的问题是字符匹配,是由Knuth–Morris–Prat ...

  3. 从零实现来理解机器学习算法:书籍推荐及障碍的克服

     从零实现来理解机器学习算法:书籍推荐及障碍的克服 发表于2015-09-10 16:16| 1261次阅读| 来源Machine Learning Mastery| 2 条评论| 作者Jason ...

  4. 从头到尾彻底理解傅里叶变换算法(上)

    从头到尾彻底理解傅里叶变换算法(上) 前言 第一部分.  DFT 第一章.傅立叶变换的由来 第二章.实数形式离散傅立叶变换(Real DFT) 从头到尾彻底理解傅里叶变换算法.下 第三章.复数 第四章 ...

  5. 经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、上

     经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong   二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide t ...

  6. 如何感性地理解EM算法?

    https://www.jianshu.com/p/1121509ac1dc 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计.个人认为,理解EM算法背后的idea,远比看懂 ...

  7. 从头到尾彻底理解傅里叶变换算法

    经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong   二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide to ...

  8. 算法 64式 14、排序算法整理_1_1到15题

    1 算法思想 这里将寻找最小/大的前k个数,寻找逆序对,线性时间选择(寻找第k小/大的元素),奇偶/大小写字符分别放在前后部分等和排序相关类型的题目,放在了排序而不是查找中. 1.1含义 排序含义:重 ...

  9. C语言程序设计(理论课)第二章(理解)算法和第三章数据类型及其运算

    第二章算法--程序的灵魂 算法+数据结构=程序 数据结构  对数据的描述.在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式. 算法  对操作的描述.即要求计算机进行操作的步骤.  广义的 ...

最新文章

  1. 2018批量打印开关_新品上市,震撼来袭!买UV平板打印机,一定看过这款后再定!...
  2. matlab中fill函数的使用方法
  3. 在Java中如何高效的判断数组中是否包含某个元素
  4. MySQL之备份恢复
  5. 《通过C#学Proto.Actor模型》之 HelloWorld
  6. 为什么我感觉生活不易挣钱太难
  7. php 生产一维码,透过 PHP 生成 一维码
  8. 三位数除以两位数竖式计算没有余数_北京版二年级数学下册第一单元有余数的除法练习题【都有电子版】...
  9. 邮箱个性签名html模板,邮箱个人签名 邮箱个人签名模板
  10. 什么是移动IP?简述其工作过程
  11. PMO如何选拔和培养项目经理?
  12. vue 一个公式 编辑器 组件
  13. POJ 3580 SuperMemo
  14. 10---OpenCV:图像进阶操作之连通区域分析
  15. Android Studio Build failed(出现 gradle sync failed 问题)解决方法
  16. 小记--------hbase数据库java API 常用方法及案例
  17. excel运行python自定义函数_终于,可以在Excel中直接使用Python!
  18. Java 跨平台获取 MAC 地址的两种方法
  19. dmx计算机,DMX512协议是什么 DMX512数字灯光控制系统介绍
  20. 动态规划-电路布线问题

热门文章

  1. css 两边宽度固定中间自适应宽度
  2. golang 文件(文件打开,文件写入,文件读取,文件删除)的基本操作
  3. Python pip – error: invalid command ‘bdist_wheel’
  4. 大小端、位段(惑位域)和内存对齐
  5. 工业串口和网络软件通讯平台(SuperIO 2.1)更新发布
  6. JavaScript高级程序设计20.pdf
  7. Day11多态部分-6 【1.5 多态的好处和弊端】
  8. nginx 启动问题:nginx (pid ) already running.
  9. HarmonyOS之深入解析线程管理
  10. Swift之深入解析反射Mirror与错误处理