【摘要】

transform,一个区间元素交换函数。该函数用于实现容器元素的变换操作。有例如以下两个使用原型,一个将迭代器区间[first。last)中元素。运行一元函数(有一个输入变量)对象op操作。交换后的结果放在[result,result+(last-first))区间中。还有一个将迭代器区间[first1,last1)的元素*i,依次与[first2,first2+(last-first))的元素*j,运行二元函数(有两个输入变量)操作binary_op(*i,*j)。交换结果放在[result,result+(last1-first1))。

【正文】

 函数原型:

template < class InputIterator, class OutputIterator, class UnaryOperator >  OutputIterator transform ( InputIterator first1, InputIterator last1,  OutputIterator result, UnaryOperator op ); 
template < class InputIterator1, class InputIterator2,  class OutputIterator, class BinaryOperator >  OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,  InputIterator2 first2, OutputIterator result,  BinaryOperator binary_op );  

參数说明:

first1, last1 
指出要进行元素变换的第一个迭代器区间 [first1,last1)。 
first2 
指出要进行元素变换的第二个迭代器区间的首个元素的迭代器位置,该区间的元素个数和第一个区间相等。 
result 
指出变换后的结果存放的迭代器区间的首个元素的迭代器位置 
op 
用一元函数对象op作为參数,运行其后返回一个结果值。

它能够是一个函数或对象内的类重载operator()。

binary_op 
用二元函数对象binary_op作为參数。运行其后返回一个结果值。它能够是一个函数或对象内的类重载operator()。

程序演示样例:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;  int op_increase (int i) { return ++i; }
int op_sum (int i, int j) { return i+j; }  int main () {  vector<int> first;  vector<int> second;  vector<int>::iterator it;  // set some values:  for (int i=1; i<6; i++) first.push_back (i*10); //  first: 10 20 30 40 50  second.resize(first.size());     // allocate space  transform (first.begin(), first.end(), second.begin(), op_increase);  // second: 11 21 31 41 51  transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum);  //  first: 21 41 61 81 101  cout << "first contains:";  for (it=first.begin(); it!=first.end(); ++it)  cout << " " << *it;  cout << endl;  return 0;
}  

转载于:https://www.cnblogs.com/jzdwajue/p/6917588.html

C++ transform 浅析相关推荐

  1. Canvas transform浅析

    没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...

  2. Transform数据权限浅析2之利用Java完成权限设置

    Transform数据权限浅析2之利用Java完成权限设置 一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要 ...

  3. SIFT(尺度不变特征变换)算法浅析

    SIFT(尺度不变特征变换)算法浅析 SIFT简介 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种算法,这是一种 ...

  4. Flutter InkWell 动画浅析

    背景 最近在开发 Flutter 项目过程中遇到了一个很有意思的 bug,如果页面在 InkWell 动画期间弹出一个 Dialog,那么 InkWell 的动画效果不会消失,如下图右上角所示.以此为 ...

  5. Android事件分发机制浅析

    文章目录 前言 一.MotionEvent 二.事件分发 1.代码模型 2.代码分析 0x00.Activity 0x01.ViewGroup 1.是否分发事件 2.事件分发前清除标记 关于Touch ...

  6. 入侵JVM?Java Agent原理浅析和实践(上)

    声明:本文首发于京东零售技术公众号,为博主本人撰写投稿. 前言: 在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信 ...

  7. Unity合批方式浅析

    Unity合批方式浅析 Draw call的优化是Unity性能优化中老生常谈的一环,而合批是CPU端优化Draw Call的主要手段.本文使用RenderDoc对Unity中常用的静态合批/动态合批 ...

  8. lottie android 源码,Lottie动画库 Android 端源码浅析

    惊艳的Lottie 前段时间airbnb开源的动画库Lottie得到了不错的反响,旨在解决Android.IOS.RN 上面开发动画成本高.表现不一致的问题,可以说降低了三端动画的开发成本. 先上几个 ...

  9. 浅析DirectX11技术带给图形业界的改变

    浅析DirectX11技术带给图形业界的改变 前言:2009年10月23日,微软高调发布了其最新一代操作系统--Windows7,这款操作系统相对于之前的Vista系统有相当大的进步,特别核心执行效率 ...

最新文章

  1. Apache的Commons Lang和BeanUtils
  2. 雷达的工作原理示意图_电磁阀的构成和工作原理示意图
  3. python实现屏幕录制_GitHub - Sijiu/record-camera-and-screen: 录制摄像头和录制屏幕,两者之间可以轻易切换...
  4. 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算
  5. xampp 无法启动appche mysql
  6. 软考初级-程序员了解
  7. PHP集成腾讯云短信SDK
  8. 基于springboot的医院管理系统
  9. 虚函数表构成、地址详细说明
  10. pocib模板流程图_各单据流程POCIB
  11. 大数据精准营销数据分析处理(一)
  12. 4-3 Vue的`:style`用法
  13. ECharts 使用xAxis.boundaryGap使x轴两边不留空白
  14. 解决 VS Code 卡顿 卡死 电脑变卡 CPU 运行高
  15. windows-快捷键
  16. Winscp链接linux开发版超时,WinSCP联接linux超时.
  17. 手机里的照片删了怎么恢复
  18. 运维工程师手把手教你提高网站的安全性
  19. 关于常用(?)字符串处理函数的合集
  20. MVCC及其原理详解

热门文章

  1. linux打开应用程序的命令,Windows环境下如何通过命令打开程序!
  2. html获取xml分页,JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
  3. 思科设备故障检测检查表
  4. [实验教程]网工都要会的IPv6 基础配置
  5. 密码认证协议PAT怎么配置?
  6. 简易linux修改ip,让Linux修改IP、DNS等可以更简单
  7. 阿里巴巴的云原生应用开源探索与实践
  8. oracle 新建TNS监听,oracle for windows 监听问题之TNS-12545
  9. 计算机实践报告800字,计算机软件专业大学生社会实践报告800字
  10. hive内置函数_flink教程flink modules详解之使用hive函数