📅  最后修改于: 2023-12-03 15:29:51.010000             🧑  作者: Mango
在 C++ STL 中,std::transform()
是一个十分实用的函数,它可以对容器中的所有元素执行指定的操作,并将结果存储到另一容器中。在日常的编程中,我们经常需要对一个容器中的元素进行操作,并将结果保存到另一个容器中,这时就可以使用 std::transform()
函数。
std::transform()
的函数原型如下:
template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);
参数解释:
first1
,last1
:定义了输入序列的范围;d_first
:目标序列的起始位置;unary_op
:对每个元素执行的操作的函数对象。下面是一个使用 std::transform()
函数将一个 vector 中的元素都平方后放入另一个 vector 的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v1{1, 2, 3, 4, 5};
std::vector<int> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(), [](int x){ return x * x; });
for (auto i : v2) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
输出结果为:
1 4 9 16 25
std::transform()
函数对每个元素都执行一个操作,这个操作是由一个函数对象来完成的。函数对象可以是普通函数、函数指针或者是 C++11 中引入的 lambda 表达式。
下面是使用一个普通函数作为函数对象的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int square(int x) { return x * x; }
int main()
{
std::vector<int> v1{1, 2, 3, 4, 5};
std::vector<int> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(), square);
for (auto i : v2) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
输出结果和上例相同。
std::transform()
函数是 C++ STL 中的一个实用函数,它可以对容器中的所有元素执行指定的操作,并将结果保存到另一个容器中。我们可以使用自定义的函数对象来执行自己想要的操作。