13.transform确保目标空间足够大
以一个例子开始讨论:
int transmogrify(int x); // 该函数更具x生成一个新的值
std::vector<int> values;
...
std::list<int> results;
std::transform(values.begin(), values.end(), results.end(), transmogrify); //
transform将values中的每个元素作为参数,调用transmogrify后将返回值写入到results.end()开始的目标空间(赋值操作)。
可是,results为空,所以results.end()返回的迭代器为空,对其进行操作将导致未定义行为。
SGI STL中transform的实现如下:
template <class _InputIter, class _OutputIter, class _UnaryOperation>
_OutputIter transform(_InputIter __first, _InputIter __last,_OutputIter __result, _UnaryOperation __opr) {__STL_REQUIRES(_InputIter, _InputIterator);__STL_REQUIRES(_OutputIter, _OutputIterator);for ( ; __first != __last; ++__first, ++__result)*__result = __opr(*__first); // 赋值return __result;
}
template <class _InputIter1, class _InputIter2, class _OutputIter,class _BinaryOperation>
_OutputIter transform(_InputIter1 __first1, _InputIter1 __last1,_InputIter2 __first2, _OutputIter __result,_BinaryOperation __binary_op) {__STL_REQUIRES(_InputIter1, _InputIterator);__STL_REQUIRES(_InputIter2, _InputIterator);__STL_REQUIRES(_OutputIter, _OutputIterator);for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)*__result = __binary_op(*__first1, *__first2); // 赋值return __result;
}
可以使用 std::back_inserter(results) 代替 results.end(),修改如下:
int transmogrify(int x); // 该函数更具x生成一个新的值
std::vector<int> values;
...
std::list<int> results;
std::transform(values.begin(), values.end(), std::back_inserter(results), transmogrify);
std::back_inserter()实际调用的是容器的push_back()。
当然,如果使要在results表头插入,可以使用 std::front_inserter(), 它实际调用得是容器的push_front(), 修改如下:
int transmogrify(int x); // 该函数更具x生成一个新的值
std::vector<int> values;
...
std::list<int> results;
std::transform(values.begin(), values.end(), std::front_inserter(results), transmogrify);
无论何时,如果所使用的算法需要指定一个目标空间,那么必须确保目标空间足够大,或者确保它会随着算法的运行而增大。要在算法执行过程中增大目标区间,请使用插入行迭代器,比如ostream_iterator或者有back_inserter、front_inserter、inserter返回的迭代器。
13.transform确保目标空间足够大相关推荐
- 确保企业的大数据投资达到预期的5种方法
如今,大数据技术正逐渐应用在人工智能,自动驾驶汽车,以及物联网等一些新兴技术中,众多企业继续在大数据分析方面投入巨资.但是,如果企业在构建基础架构和购买工具方面盲目地进行投资,而没有真正考虑如何从数据 ...
- 如果神经网络规模足够大,会产生智能吗?
作者:桔了个仔 链接:https://www.zhihu.com/question/408690594/answer/1363115251 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非 ...
- android 存储不被垃圾清理,手机内存足够大,就不需要清理垃圾了?你错了!
原标题:手机内存足够大,就不需要清理垃圾了?你错了! 中新网4月20日电今天,人们使用智能手机的时间已超过电脑,希望在任何时候.任何地方,一部手机搞定所有.对手机的流畅度.性能和安全的要求越来越高.新 ...
- Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。
重新装office之后打开系统的文件提示: Word在试图打开文件时遇到错误. 请尝试下列方法: 检查文档或驱动器的文件权限. 确保有足够的内存和磁盘空间. 用文本恢复转换器打开文件. 1.文件安全性 ...
- 我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可 以保证厚度不低于珠穆朗玛峰的高度?
我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m.请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度? class Test5_2{public static ...
- 使用Java语言while循环来实现假如我有一张足够大的纸,他的厚度为0.1毫米 请问折叠多少次,可以折叠到珠峰高度?
使用Java语言while循环来实现假如我有一张足够大的纸,他的厚度为0.1毫米 请问折叠多少次,可以折叠到珠峰高度? /* while 循环 需求: 世界上最高的山峰是珠穆朗玛峰(8844.43米= ...
- Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件
Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件 . 经常在浏览器上直接下载的文档打开就报这个错,也不知道是什么原因,最后 ...
- “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!...
Word在试图打开文件时遇到错误. 请尝试下列方法: * 检查文档或驱动器的文件权限. * 确保有足够的内存和磁盘空间. * 用文件恢复转换器打开文件. 如下图: 让同事在他们自己电脑上,都是可以打开 ...
- 在XP下把win7安装到VHD,内存足够大可以RAMOS
在XP下把win7安装到VHD,内存足够大可以RAMOS 1.用DiskGenius创建VHD固定大小磁盘文件,以win7vhd.vhd为例,然后进行分区格式化,格式化时启用NTFS压缩. 2.进入W ...
最新文章
- 不同机器互相调用WebService或者HTTP一定要telnet 测试
- Tomcat性能调优-让小猫飞奔[转]
- 卸载后的mysql和navicat怎么清除干净_小而巧的卸载工具
- 字符串之数组中两个字符串的最小距离
- leetcode518. 零钱兑换 II
- ssl1562-局域网
- sphinx配置 + php
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
- 用动态规划解决最长公共子序列问题 C语言,动态规划之最长公共子序列问题 C++实现...
- GP学习(八)—How to access a raster dataset and to create a raster dataset
- 如何在 GitHub 上大显身手?
- Ubuntu16.04中安装Moveit教程及示例教程
- Web前端第一季(HTML):十四:课时 38 : 309-文本域完成大段文本的输入+课时 39 : 310-表单的属性+课时 40 : 311-文件上传
- 程序员的节日!干杯!
- 电源php38电路,六款uc3842开关电源电路图分享
- 如何获取每周的星期一和星期天的日期
- PDF密码可以破解吗?有没有PDF解密的方法
- discuz模板修改html,Discuz 修改门户的模板——静态页面套用(动态页写死方法以更新)...
- bcc语料库下载_语料库汇总
- 【后端学习之路】Browsers and how they work?
热门文章
- Python学习之 !/usr/bin/python 和 !/usr/bin/env python区别
- ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
- Tomcat与Jre绿色环境配置(生产环境)
- 【UI】android如何绘制一个饼图
- Sql Server中三种字符串合并方法的性能比较
- 域名转入Godaddy详解
- 二次修改:【练习题】构造方法的重载:Vehicles(交通工具)-Car(小汽车)和Truck(卡车)类继承于Vehicles类
- 牛客网(剑指offer) 第十二题 数值的整数次方
- 企业c语言的编程风格,c语言优秀编程风格.docx
- [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)