C++ transform 浅析
【摘要】
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 浅析相关推荐
- Canvas transform浅析
没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...
- Transform数据权限浅析2之利用Java完成权限设置
Transform数据权限浅析2之利用Java完成权限设置 一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要 ...
- SIFT(尺度不变特征变换)算法浅析
SIFT(尺度不变特征变换)算法浅析 SIFT简介 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种算法,这是一种 ...
- Flutter InkWell 动画浅析
背景 最近在开发 Flutter 项目过程中遇到了一个很有意思的 bug,如果页面在 InkWell 动画期间弹出一个 Dialog,那么 InkWell 的动画效果不会消失,如下图右上角所示.以此为 ...
- Android事件分发机制浅析
文章目录 前言 一.MotionEvent 二.事件分发 1.代码模型 2.代码分析 0x00.Activity 0x01.ViewGroup 1.是否分发事件 2.事件分发前清除标记 关于Touch ...
- 入侵JVM?Java Agent原理浅析和实践(上)
声明:本文首发于京东零售技术公众号,为博主本人撰写投稿. 前言: 在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信 ...
- Unity合批方式浅析
Unity合批方式浅析 Draw call的优化是Unity性能优化中老生常谈的一环,而合批是CPU端优化Draw Call的主要手段.本文使用RenderDoc对Unity中常用的静态合批/动态合批 ...
- lottie android 源码,Lottie动画库 Android 端源码浅析
惊艳的Lottie 前段时间airbnb开源的动画库Lottie得到了不错的反响,旨在解决Android.IOS.RN 上面开发动画成本高.表现不一致的问题,可以说降低了三端动画的开发成本. 先上几个 ...
- 浅析DirectX11技术带给图形业界的改变
浅析DirectX11技术带给图形业界的改变 前言:2009年10月23日,微软高调发布了其最新一代操作系统--Windows7,这款操作系统相对于之前的Vista系统有相当大的进步,特别核心执行效率 ...
最新文章
- Apache的Commons Lang和BeanUtils
- 雷达的工作原理示意图_电磁阀的构成和工作原理示意图
- python实现屏幕录制_GitHub - Sijiu/record-camera-and-screen: 录制摄像头和录制屏幕,两者之间可以轻易切换...
- 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算
- xampp 无法启动appche mysql
- 软考初级-程序员了解
- PHP集成腾讯云短信SDK
- 基于springboot的医院管理系统
- 虚函数表构成、地址详细说明
- pocib模板流程图_各单据流程POCIB
- 大数据精准营销数据分析处理(一)
- 4-3 Vue的`:style`用法
- ECharts 使用xAxis.boundaryGap使x轴两边不留空白
- 解决 VS Code 卡顿 卡死 电脑变卡 CPU 运行高
- windows-快捷键
- Winscp链接linux开发版超时,WinSCP联接linux超时.
- 手机里的照片删了怎么恢复
- 运维工程师手把手教你提高网站的安全性
- 关于常用(?)字符串处理函数的合集
- MVCC及其原理详解
热门文章
- linux打开应用程序的命令,Windows环境下如何通过命令打开程序!
- html获取xml分页,JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
- 思科设备故障检测检查表
- [实验教程]网工都要会的IPv6 基础配置
- 密码认证协议PAT怎么配置?
- 简易linux修改ip,让Linux修改IP、DNS等可以更简单
- 阿里巴巴的云原生应用开源探索与实践
- oracle 新建TNS监听,oracle for windows 监听问题之TNS-12545
- 计算机实践报告800字,计算机软件专业大学生社会实践报告800字
- hive内置函数_flink教程flink modules详解之使用hive函数