—правочник по C/C++
transform()

template <class InIter, class OutIter, class Funс>
	OutIter transform(InIter start, InIter end,
				OutIter result, Func unaryfunc);
template <class InIter1, class InIter2, class OutIter, class Func>
	OutIter transform(InIter1 start1, InIter1 end1, InIter2 start2,
				OutIter result, Func binaryfunc);

ќписание

ѕримен€ет функцию к диапазону элементов и сохран€ет результат в последовательности

јлгоритм transform() примен€ет функцию к диапазону элементов и сохран€ет результат в последовательности, заданной параметром result. ¬ первой форме диапазон задаетс€ параметрами start и end. ѕримен€ема€ функци€ задаетс€ параметром unaryfunc. ќна принимает значение элемента в качестве параметра и должна возвратить преобразованное значение.

¬о второй форме алгоритма преобразование примен€етс€ с использованием бинарной функции, котора€ принимает значение элемента из последовательности, предназначенного дл€ преобразовани€, в качестве первого параметра и элемент из второй последовательности в качестве второго параметра.

ќбе версии возвращают итератор, указывающий на конец результирующей последовательности.


—овет программисту

ќдним из самых интересных алгоритмов €вл€етс€ алгоритм transform(), поскольку он модифицирует каждый элемент из заданного диапазона в соответствии с предоставленной вами функцией. Ќапример, в следующей программе используетс€ проста€ функци€ преобразовани€ xform(), предназначенна€ дл€ возведени€ в квадрат содержимого списка. ќбратите внимание, что результирующа€ последовательность сохран€етс€ в том же списке, в котором содержитс€ и исходна€.

// ѕример использовани€ алгоритма преобразовани€ transform().
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

// ѕроста€ функци€ преобразовани€,
int xform(int i) {
	return i*i; // квадрат исходного значени€
}

int main()
{
	list<int> xl;

	int i;

	//ѕомещаем значени€ в список.
	for(i=0; i<10; i++) xl.push_back(i);

	cout << "»сходное содержимое списка xl: ";
	list<int>::iterator p = xl.begin();
	while(p != xl.end()){
		cout << *p << " ";
		p++;
	}

	cout << endl;

	// ѕреобразуем список xl.
	p = transform(xl.begin() , xl.end(), xl.begin(), xform);

	cout << "ѕреобразованное содержимое списка xl:";

	p = xl.begin();
	while(p!= xl.end()) {
		cout << *p << " ";
		p++;
	}

	return 0;
}

Ќиже представлен результат работы этой программы.

»сходной содержимое списка xl: 		0 1 2 3 4 5 6 7 8 9
ѕреобразованное содержимое списка xl: 	0 1 4 9 16 25 36 49 64 81

 ак видите, каждый элемент в списке xl возведен в квадрат.







–Э–µ—В –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–µ–≤.



–Ю—Б—В–∞–≤–Є—В—М –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є:
–Т–∞—И–µ –Ш–Љ—П:
Email:
–Р–љ—В–Є–±–Њ—В: *  
–Т–∞—И –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є: