c++遍历算法的transform算法
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;
}