c++中transform

转载 2016年05月31日 19:16:19
  前篇我们已经了解了一种区间元素交换swap_ranges函数,现在我们再来学习另外一种区间元素交换transform。该算法用于实行容器元素的变换操作。有如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,交换后的结果放在[result,result+(last-first))区间中。另一个将迭代器区间[first1,last1)的元素*i,依次与[first2,first2+(last-first))的元素*j,执行二元函数操作binary_op(*i,*j),交换结果放在[result,result+(last1-first1))。

     函数原型:

  1. template < class InputIterator, class OutputIterator, class UnaryOperator >  
  2.   OutputIterator transform ( InputIterator first1, InputIterator last1,  
  3.                              OutputIterator result, UnaryOperator op );  
  4.   
  5. template < class InputIterator1, class InputIterator2,  
  6.            class OutputIterator, class BinaryOperator >  
  7.   OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,  
  8.                              InputIterator2 first2, OutputIterator result,  
  9.                              BinaryOperator binary_op );  

     参数说明:

first1, last1
指出要进行元素变换的第一个迭代器区间 [first1,last1)。
first2
指出要进行元素变换的第二个迭代器区间的首个元素的迭代器位置,该区间的元素个数和第一个区间相等。
 
result
指出变换后的结果存放的迭代器区间的首个元素的迭代器位置
op
用一元函数对象op作为参数,执行其后返回一个结果值。它可以是一个函数或对象内的类重载operator()。
binary_op
用二元函数对象binary_op作为参数,执行其后返回一个结果值。它可以是一个函数或对象内的类重载operator()。

      程序示例:

  1. /*******************************************************************   
  2.  * Copyright (C) Jerry Jiang   
  3.  *                  
  4.  * File Name   : transform .cpp   
  5.  * Author      : Jerry Jiang   
  6.  * Create Time : 2012-4-29 22:22:18   
  7.  * Mail        : jbiaojerry@gmail.com   
  8.  * Blog        : http://blog.csdn.net/jerryjbiao    
  9.  *                  
  10.  * Description : 简单的程序诠释C++ STL算法系列之十八                     
  11.  *               变易算法 : 区间元素交换 transform  
  12.  *                  
  13.  ******************************************************************/      
  14. #include <iostream>  
  15. #include <algorithm>  
  16. #include <vector>  
  17. using namespace std;  
  18.   
  19. int op_increase (int i) { return ++i; }  
  20. int op_sum (int i, int j) { return i+j; }  
  21.   
  22. int main () {  
  23.   vector<int> first;  
  24.   vector<int> second;  
  25.   vector<int>::iterator it;  
  26.   
  27.   // set some values:  
  28.   for (int i=1; i<6; i++) first.push_back (i*10); //  first: 10 20 30 40 50  
  29.   
  30.   second.resize(first.size());     // allocate space  
  31.   transform (first.begin(), first.end(), second.begin(), op_increase);  
  32.                                                   // second: 11 21 31 41 51  
  33.   
  34.   transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum);  
  35.                                                   //  first: 21 41 61 81 101  
  36.   
  37.   cout << "first contains:";  
  38.   for (it=first.begin(); it!=first.end(); ++it)  
  39.     cout << " " << *it;  
  40.   
  41.   cout << endl;  
  42.   return 0;  

C++/C++11中std::transform的使用

C++/C++11中std::transform的使用
  • fengbingchun
  • fengbingchun
  • 2017年03月18日 11:48
  • 3774

C++学习transform函数的应用

transform函数的作用是:将某操作应用于指定范围的每个元素。transform函数有两个重载版本: transform(first,last,result,op);//first是容器的首迭代...
  • luguifang2011
  • luguifang2011
  • 2014年03月04日 19:48
  • 1616

C++标准库---transform()

transform 算法transform()提供以下两种能力: 1.第一形式有4个参数,把源区间的元素转换到目标区间。也就是说,复制和修改元素一气呵成; 2.第二形式有5个参数,将前两个源序列中的元...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2015年01月02日 18:27
  • 792

STL_算法_transform

C++ Primer 学习中。。。   简单记录下我的学习过程 (代码为主) 所有容器适用 transform(b1,e1,b2,op)      //...
  • u010579068
  • u010579068
  • 2016年01月15日 13:51
  • 1801

C++ transform 浅析

transform,一个区间元素交换函数。该函数用于实现容器元素的变换操作。有如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数(有一个输入变量)对象op操作,交换后的结果...
  • u013630349
  • u013630349
  • 2015年07月23日 12:04
  • 1088

C++ transform

#include #include #include #include #include using namespace std; int main(){ array t1 = {...
  • starcuan
  • starcuan
  • 2014年02月09日 01:19
  • 2584

如何开发传输过滤器(Transform filter)

摘要:本篇文档主要讲述了利用Directshow开发传输filter 时应该注意的一些事情。 在开发自己的filter之前,看看DMO(DirectX Media Object)是否满足你的要求,因为...
  • aoosang
  • aoosang
  • 2005年05月26日 10:32
  • 5164

STL transform用法

/*//////////////////////////////// template OutputIterator transform ( InputIterator first1, // 源...
  • tujiaw
  • tujiaw
  • 2011年11月16日 12:11
  • 8826

C++ string大小写转换以及transform,tolower,toupper,用法

C++中没有string直接转换大小写的函数,需要自己实现。一般来讲,可以用stl的algorithm实现: #include #include #include ...
  • qq_31186409
  • qq_31186409
  • 2016年01月20日 00:11
  • 6092

STL算法 ------- transform()

1. transform() 算法有两种形式:       transform( b1, e1, b2, op )       transform( b1, e1, b2, b3, op ) ...
  • u011334621
  • u011334621
  • 2015年03月06日 18:20
  • 375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++中transform
举报原因:
原因补充:

(最多只允许输入30个字)