以一个例子开始讨论:

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确保目标空间足够大相关推荐

  1. 确保企业的大数据投资达到预期的5种方法

    如今,大数据技术正逐渐应用在人工智能,自动驾驶汽车,以及物联网等一些新兴技术中,众多企业继续在大数据分析方面投入巨资.但是,如果企业在构建基础架构和购买工具方面盲目地进行投资,而没有真正考虑如何从数据 ...

  2. 如果神经网络规模足够大,会产生智能吗?

    作者:桔了个仔 链接:https://www.zhihu.com/question/408690594/answer/1363115251 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非 ...

  3. android 存储不被垃圾清理,手机内存足够大,就不需要清理垃圾了?你错了!

    原标题:手机内存足够大,就不需要清理垃圾了?你错了! 中新网4月20日电今天,人们使用智能手机的时间已超过电脑,希望在任何时候.任何地方,一部手机搞定所有.对手机的流畅度.性能和安全的要求越来越高.新 ...

  4. Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。

    重新装office之后打开系统的文件提示: Word在试图打开文件时遇到错误. 请尝试下列方法: 检查文档或驱动器的文件权限. 确保有足够的内存和磁盘空间. 用文本恢复转换器打开文件. 1.文件安全性 ...

  5. 我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可 以保证厚度不低于珠穆朗玛峰的高度?

    我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m.请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度? class Test5_2{public static ...

  6. 使用Java语言while循环来实现假如我有一张足够大的纸,他的厚度为0.1毫米 请问折叠多少次,可以折叠到珠峰高度?

    使用Java语言while循环来实现假如我有一张足够大的纸,他的厚度为0.1毫米 请问折叠多少次,可以折叠到珠峰高度? /* while 循环 需求: 世界上最高的山峰是珠穆朗玛峰(8844.43米= ...

  7. Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件

    Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件  . 经常在浏览器上直接下载的文档打开就报这个错,也不知道是什么原因,最后 ...

  8. “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!...

    Word在试图打开文件时遇到错误. 请尝试下列方法: * 检查文档或驱动器的文件权限. * 确保有足够的内存和磁盘空间. * 用文件恢复转换器打开文件. 如下图: 让同事在他们自己电脑上,都是可以打开 ...

  9. 在XP下把win7安装到VHD,内存足够大可以RAMOS

    在XP下把win7安装到VHD,内存足够大可以RAMOS 1.用DiskGenius创建VHD固定大小磁盘文件,以win7vhd.vhd为例,然后进行分区格式化,格式化时启用NTFS压缩. 2.进入W ...

最新文章

  1. 不同机器互相调用WebService或者HTTP一定要telnet 测试
  2. Tomcat性能调优-让小猫飞奔[转]
  3. 卸载后的mysql和navicat怎么清除干净_小而巧的卸载工具
  4. 字符串之数组中两个字符串的最小距离
  5. leetcode518. 零钱兑换 II
  6. ssl1562-局域网
  7. sphinx配置 + php
  8. Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
  9. 用动态规划解决最长公共子序列问题 C语言,动态规划之最长公共子序列问题 C++实现...
  10. GP学习(八)—How to access a raster dataset and to create a raster dataset
  11. 如何在 GitHub 上大显身手?
  12. Ubuntu16.04中安装Moveit教程及示例教程
  13. Web前端第一季(HTML):十四:课时 38 : 309-文本域完成大段文本的输入+课时 39 : 310-表单的属性+课时 40 : 311-文件上传
  14. 程序员的节日!干杯!
  15. 电源php38电路,六款uc3842开关电源电路图分享
  16. 如何获取每周的星期一和星期天的日期
  17. PDF密码可以破解吗?有没有PDF解密的方法
  18. discuz模板修改html,Discuz 修改门户的模板——静态页面套用(动态页写死方法以更新)...
  19. bcc语料库下载_语料库汇总
  20. 【后端学习之路】Browsers and how they work?

热门文章

  1. Python学习之 !/usr/bin/python 和 !/usr/bin/env python区别
  2. ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
  3. Tomcat与Jre绿色环境配置(生产环境)
  4. 【UI】android如何绘制一个饼图
  5. Sql Server中三种字符串合并方法的性能比较
  6. 域名转入Godaddy详解
  7. 二次修改:【练习题】构造方法的重载:Vehicles(交通工具)-Car(小汽车)和Truck(卡车)类继承于Vehicles类
  8. 牛客网(剑指offer) 第十二题 数值的整数次方
  9. 企业c语言的编程风格,c语言优秀编程风格.docx
  10. [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)