transform
算法函数用于对指定范围内的元素进行一个操作,并将结果存储到另一个范围中。
template<class InputIterator, class OutputIterator, class UnaryOperation> OutputIterator transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op);
功能:
对范围 [first, last)
内的每个元素应用一元操作 op
,并将结果依次存储在范围 [result, result + (last - first))
中。
返回值:
返回指向存储结果的范围的尾后迭代器 result + (last - first)
。
注意事项:
- 要确保目标范围
[result, result + (last - first))
有足够的空间来存储转换后的结果。 transform
函数可以用于任何支持迭代器的容器(如向量、链表、数组等)。- 需要包含
<algorithm>
头文件。
总结:transform
算法用于对指定范围内的元素进行一个操作,并将结果存储到另一个范围中。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<functional>
#include<vector>
#include<algorithm>
using namespace std;
//transform容器不会提前给目标容器分配内存,要提前分配
struct myadd
{int operator()(int val){return val + 100;}
};
void test01()
{vector<int>v;v.push_back(23);v.push_back(22);v.push_back(11);vector<int>v2;//手动分配内存v2.resize(v.size());/*for (; _UFirst != _ULast; ++_UFirst, (void) ++_UDest) {*_Dest = _Func(*_UFirst);return _Dest;
}*/transform(v.begin(), v.end(), v2.begin(), myadd());for_each(v2.begin(), v2.end(), [](int val)->void{ cout << val << " "; });//返回类型为void
}
struct myadd2
{int operator()(int val1, int val2){return val1 + val2;}
};
void test02()
{vector<int>v;v.push_back(23);v.push_back(22);v.push_back(11);vector<int>v2;v2.push_back(100);v2.push_back(200);v2.push_back(299);v2.push_back(200);int a;/*if (v.size() > v2.size()){a = v.size();}else{a = v2.size();}*/a = max(v.size(), v2.size());vector<int>v3;v3.resize(a);transform(v.begin(), v.end(), v2.begin(), v3.begin(), myadd2());for_each(v3.begin(), v3.end(), [](int val)->void { cout << val << " "; });//返回类型为void//结果//123 222 310 0
}
int main()
{test02();system("pause");return 0;
}