14.理解copy_if算法的正确实现
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算法的正确实现相关推荐
- 第3章 感受(一)——3.14. Hello STL 算法篇
[回到目录] 白话C++ 3.14. Hello STL 算法篇 前一小节,在输出成绩时,我们从students中得到每个学生的学号,然后,通过for循环,在一个list中查找符合"学号等于 ...
- 从头到尾理解KMP算法
转自http://saturnman.blog.163.com/blog/static/5576112010969957130/ KMP算法解决的问题是字符匹配,是由Knuth–Morris–Prat ...
- 从零实现来理解机器学习算法:书籍推荐及障碍的克服
从零实现来理解机器学习算法:书籍推荐及障碍的克服 发表于2015-09-10 16:16| 1261次阅读| 来源Machine Learning Mastery| 2 条评论| 作者Jason ...
- 从头到尾彻底理解傅里叶变换算法(上)
从头到尾彻底理解傅里叶变换算法(上) 前言 第一部分. DFT 第一章.傅立叶变换的由来 第二章.实数形式离散傅立叶变换(Real DFT) 从头到尾彻底理解傅里叶变换算法.下 第三章.复数 第四章 ...
- 经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、上
经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong 二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide t ...
- 如何感性地理解EM算法?
https://www.jianshu.com/p/1121509ac1dc 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计.个人认为,理解EM算法背后的idea,远比看懂 ...
- 从头到尾彻底理解傅里叶变换算法
经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong 二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide to ...
- 算法 64式 14、排序算法整理_1_1到15题
1 算法思想 这里将寻找最小/大的前k个数,寻找逆序对,线性时间选择(寻找第k小/大的元素),奇偶/大小写字符分别放在前后部分等和排序相关类型的题目,放在了排序而不是查找中. 1.1含义 排序含义:重 ...
- C语言程序设计(理论课)第二章(理解)算法和第三章数据类型及其运算
第二章算法--程序的灵魂 算法+数据结构=程序 数据结构 对数据的描述.在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式. 算法 对操作的描述.即要求计算机进行操作的步骤. 广义的 ...
最新文章
- 2018批量打印开关_新品上市,震撼来袭!买UV平板打印机,一定看过这款后再定!...
- matlab中fill函数的使用方法
- 在Java中如何高效的判断数组中是否包含某个元素
- MySQL之备份恢复
- 《通过C#学Proto.Actor模型》之 HelloWorld
- 为什么我感觉生活不易挣钱太难
- php 生产一维码,透过 PHP 生成 一维码
- 三位数除以两位数竖式计算没有余数_北京版二年级数学下册第一单元有余数的除法练习题【都有电子版】...
- 邮箱个性签名html模板,邮箱个人签名 邮箱个人签名模板
- 什么是移动IP?简述其工作过程
- PMO如何选拔和培养项目经理?
- vue 一个公式 编辑器 组件
- POJ 3580	SuperMemo
- 10---OpenCV:图像进阶操作之连通区域分析
- Android Studio Build failed(出现 gradle sync failed 问题)解决方法
- 小记--------hbase数据库java API 常用方法及案例
- excel运行python自定义函数_终于,可以在Excel中直接使用Python!
- Java 跨平台获取 MAC 地址的两种方法
- dmx计算机,DMX512协议是什么 DMX512数字灯光控制系统介绍
- 动态规划-电路布线问题
热门文章
- css 两边宽度固定中间自适应宽度
- golang 文件(文件打开,文件写入,文件读取,文件删除)的基本操作
- Python pip – error: invalid command ‘bdist_wheel’
- 大小端、位段(惑位域)和内存对齐
- 工业串口和网络软件通讯平台(SuperIO 2.1)更新发布
- JavaScript高级程序设计20.pdf
- Day11多态部分-6 【1.5 多态的好处和弊端】
- nginx 启动问题:nginx (pid ) already running.
- HarmonyOS之深入解析线程管理
- Swift之深入解析反射Mirror与错误处理