std::transform 函数介绍及使用场景
在 C++ 中,std::transform
是一个非常实用的算法,它可以将一个范围内的元素按照指定的规则进行转换,并将结果存储到另一个范围中。本文将介绍 std::transform
函数的使用方法、使用场景以及一些示例。
1. 函数介绍
std::transform
函数是 C++ 标准库中的一个通用算法。
transform
函数的作用是将输入范围内的每个元素通过一元操作函数__unary_op
进行处理,并将处理后的结果存储在输出范围内。具体实现过程如下:
- 使用
while
循环遍历输入范围内的每个元素,直到遇到__last
。 - 在循环内部,将当前元素传递给一元操作函数
__unary_op
,并将返回值存储在输出范围内的当前位置。 - 返回输出范围的结束迭代器。
其方法原型如下:
template<typename _InputIterator, typename _OutputIterator,
typename _UnaryOperation>
_OutputIterator
transform(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _UnaryOperation __unary_op)
它接受四个参数:
_InputIterator __first:输入范围的起始迭代器。
_InputIterator __last:输入范围的结束迭代器。
_OutputIterator __result:输出范围的起始迭代器。
_UnaryOperation __unary_op:一个一元操作函数,用于对输入范围内的每个元素进行处理。
函数的返回类型是_OutputIterator,即输出范围的结束迭代器。
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _BinaryOperation>
_OutputIterator
transform(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _OutputIterator __result,
_BinaryOperation __binary_op)
函数参数说明如下:
_InputIterator1 __first1:输入范围的第一个迭代器。
_InputIterator1 __last1:输入范围的最后一个迭代器。
_InputIterator2 __first2:第二个输入范围的第一个迭代器。
_OutputIterator __result:输出迭代器,用于存储映射结果。
_BinaryOperation __binary_op:二元操作,用于对输入范围的元素进行映射。
函数返回值:_OutputIterator,指向映射结果的下一个位置。
使用该函数,必须添加包含算法库“algorithm”。
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
std::vector<int> result(nums.size());
std::transform(nums.begin(), nums.end(), result.begin(), [](int x) { return x * 2; });
for (int x : result) {
std::cout << x << " ";
}
return 0;
}
2. 使用场景
2.1 将一个序列中的元素乘以 2
std::transform
函数可以用于将一个序列中的元素按照指定的规则进行转换。例如,我们可以将一个整数向量中的每个元素乘以 2,然后将结果存储到另一个向量中。
std::vector<int> nums = {1, 2, 3, 4, 5};
std::vector<int> result(nums.size());
std::transform(nums.begin(), nums.end(), result.begin(), [](int x) { return x * 2; });
2.2 对两个序列进行逐个元素的组合
std::transform
函数还可以用于对两个序列进行逐个元素的组合。例如,我们可以将两个字符串向量中的对应元素拼接起来,然后将结果存储到一个新的向量中。
std::vector<std::string> str1 = {"Hello", "World"};
std::vector<std::string> str2 = {"!", "?"};
std::vector<std::string> result(str1.size());
std::transform(str1.begin(), str1.end(), str2.begin(), result.begin(), [](const std::string& a, const std::string& b) { return a + b; });
3. 总结
std::transform
函数是 C++ 标准库中的一个通用算法,它可以将一个范围内的元素按照指定的规则进行转换,并将结果存储到另一个范围中。它可以应用于多种场景,如将一个序列中的元素乘以 2、对两个序列进行逐个元素的组合等。掌握 std::transform
函数的使用方法,可以帮助我们更高效地处理各种数据处理任务。