transform

来自cppreference.com
跳转到: 导航, 搜索

目录

[编辑] 语法

#include <algorithm>
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 );

版本一:transform算法将[first1, last1)范围内的元素顺序做op(子程序)操作并保存其到[result...)中

版本二:transform算法将[first1, last1)范围内的元素顺序做op(子程序)操作并保存其到[first2, last2)中

[编辑] 参数

  • first1, last1

Input iterators to the initial and final positions of the first sequence. The range used is [first1,last1), which contains all the elements between first1 and last1, including the element pointed by first1 but not the element pointed by last1.

  • first2

Input iterator to the initial position of the second range. The range includes as many elements as [first1,last1).

  • result

Output iterator to the initial position of the range where function results are stored. The range includes as many elements as [first1,last1).

  • op

Unary function taking one element as argument, and returning some result value. This can either be a pointer to a function or an object whose class overloads operator(). binary_op Binary function taking two elements as argument (one of each of the two sequences), and returning some result value. This can either be a pointer to a function or an object whose class overloads operator().

[编辑] 返回值

指向result下一个元素的迭代指针

[编辑] 例子

下面的代码将计算统计出2的10000次方的的值并计算出十进制位和:

#include<iostream>
#include<functional>
#include<algorithm>
#include<numeric>
#include<vector>
#include<iterator>
 
using namespace std;
 
typedef vector<int> BigInt;
int carry(int curr, int prev)
{
	return curr + (prev / 10);
}
 
BigInt & operator*=(BigInt& bi, int m)
{
	transform(bi.begin(), bi.end(), bi.begin(), bind2nd(multiplies<int>(), m));
	if(bi.back() > 9)
		bi.push_back(0);
 
	adjacent_difference(bi.begin(), bi.end(), bi.begin(), ptr_fun(&carry));
	transform(bi.begin(), bi.end(), bi.begin(), bind2nd(modulus<int>(), 10));
	return bi;
}
int main(int argc, char * argv[])
{
 
	BigInt bigInteger;
	int base = 2;
	int powNum = 10000;
	bigInteger.push_back(base);
 
	int loop = {1};
	while(loop++ < powNum)
		bigInteger *= 2;
 
	int sum_of_digits = accumulate(bigInteger.begin(), bigInteger.end(), 0);
 
	std::cout  << base << "**" << powNum << "= " << std::endl;
	copy(bigInteger.rbegin(), bigInteger.rend(), ostream_iterator<int>(cout, ""));
	puts("");
	cout << "\nThe sum of the digits is " << sum_of_digits << "\n";
 
	system("pause");
	return 0;
}

When run, the above code displays this output:

2**10000= 
19950631168807583848837421626835850838234968318861924548520089498529438830221946631919961684036194597899331129423209124271556491349413781117593785932096323957855730046793794526765246551266059895520550086918193311542508608460618104685509074866089624888090489894838009253941633257850621568309473902556912388065225096643874441046759871626985453222868538161694315775629640762836880760732228535091641476183956381458969463899410840960536267821064621427333394036525565649530603142680234969400335934316651459297773279665775606172582031407994198179607378245683762280037302885487251900834464581454650557929601414833921615734588139257095379769119277800826957735674444123062018757836325502728323789270710373802866393031428133241401624195671690574061419654342324638801248856147305207431992259611796250130992860241708340807605932320161268492288496255841312844061536738951487114256315111089745514203313820202931640957596464756010405845841566072044962867016515061920631004186422275908670900574606417856951911456055068251250406007519842261898059237118054444788072906395242548339221982707404473162376760846613033778706039803413197133493654622700563169937455508241780972810983291314403571877524768509857276937926433221599399876886660808368837838027643282775172273657572744784112294389733810861607423253291974813120197604178281965697475898164531258434135959862784130128185406283476649088690521047580882615823961985770122407044330583075869039319604603404973156583208672105913300903752823415539745394397715257455290510212310947321610753474825740775273986348298498340756937955646638621874569499279016572103701364433135817214311791398222983845847334440270964182851005072927748364550578634501100852987812389473928699540834346158807043959118985815145779177143619698728131459483783202081474982171858011389071228250905826817436220577475921417653715687725614904582904992461028630081535583308130101987675856234343538955409175623400844887526162643568648833519463720377293240094456246923254350400678027273837755376406726898636241037491410966718557050759098100246789880178271925953381282421954028302759408448955014676668389697996886241636313376393903373455801407636741877711055384225739499110186468219696581651485130494222369947714763069155468217682876200362777257723781365331611196811280792669481887201298643660768551639860534602297871557517947385246369446923087894265948217008051120322365496288169035739121368338393591756418733850510970271613915439590991598154654417336311656936031122249937969999226781732358023111862644575299135758175008199839236284615249881088960232244362173771618086357015468484058622329792853875623486556440536962622018963571028812361567512543338303270029097668650568557157505516727518899194129711337690149916181315171544007728650573189557450920330185304847113818315407324053319038462084036421763703911550639789000742853672196280903477974533320468368795868580237952218629120080742819551317948157624448298518461509704888027274721574688131594750409732115080498190455803416826949787141316063210686391511681774304792596709376
 
The sum of the digits is 13561
Press any key to continue . . .

[编辑] 复杂度

Linear: Performs as many assignments and applications of op or binary_op as the number of elements in the range [first1,last1). linear time.

[编辑] 另见

个人工具
名字空间
操作
导航
工具箱
其他语言