C++ 中的 transform 函数
在C++标准模板库(STL)中,transform函数是一个非常有用的算法,它允许我们对容器中的元素进行转换并将结果存储在另一个容器中。在本文中,我们将详细讨论transform函数的使用方法和示例代码。
transform 函数的语法
transform函数的语法如下所示:
template <class InputIterator, class OutputIterator, class UnaryOperation>
OutputIterator transform (InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperation unary_op);
这里有几个参数需要解释一下:
- InputIterator first1, InputIterator last1:定义了输入范围,包括要转换的元素。
- OutputIterator result:定义了输出范围,用于存储转换后的元素。
- UnaryOperation unary_op:定义了被应用于输入范围中每个元素的一元函数对象,可以是函数指针、函数对象或lambda表达式。
transform 函数的示例
接下来我们将通过几个示例来演示transform函数的用法。
示例1:将一个vector中的每个元素都乘以2
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> result(vec.size());
// 使用lambda表达式将每个元素乘以2并存储到result中
std::transform(vec.begin(), vec.end(), result.begin(),
[](int x) { return x * 2; });
// 输出转换后的结果
for (int num : result) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
运行结果:
2 4 6 8 10
在这个示例中,我们定义了一个vector包含{1, 2, 3, 4, 5},然后使用transform函数将每个元素乘以2,并将结果存储在result中。最终输出的结果是{2, 4, 6, 8, 10}。
示例2:将字符串转换为大写字母
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "hello, world!";
std::string result(str.size(), ' ');
// 使用lambda表达式将字符串中的每个字符转换为大写字母并存储到result中
std::transform(str.begin(), str.end(), result.begin(),
[](char c) { return std::toupper(c); });
// 输出转换后的结果
std::cout << result << std::endl;
return 0;
}
运行结果:
HELLO, WORLD!
在这个示例中,我们定义了一个字符串”hello, world!”,然后使用transform函数将字符串中的每个字符转换为大写字母,并将结果存储在result中。最终输出的结果是”HELLO, WORLD!”。
总结
transform函数是一个非常有用的算法,它可以方便地对容器中的元素进行转换操作。我们可以通过传入不同的一元函数对象来实现不同的转换操作,使代码更加简洁和灵活。