C++11 std::transform函数使用小结
作者:telllong
std::transform是C++标准库中的一个算法,它用于对输入范围内的元素进行操作,并将结果存储在输出范围内,本文就介绍了std::transform函数的具体使用,感兴趣的可以了解一下
std::transform是C++标准库中的一个算法,它用于对输入范围内的元素进行操作,并将结果存储在输出范围内。这个算法特别适合于将一种数据类型转换为另一种数据类型。
函数定义在头文件algorithm中
std::transform的基本语法如下:
std::transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);
或者
std::transform(InputIt1 first1, InputIt1 last1, InputIt2 first2, OutputIt d_first, BinaryOperation binary_op);
其中:
- first1 和 last1 是输入范围的迭代器,指定了要进行操作的元素范围。
- d_first 是输出范围的起始迭代器,std::transform将结果存储在此位置开始的位置。
- unary_op 是一个一元操作函数(或函数指针、函数对象),它定义了对输入元素进行操作的方式。
- binary_op 是一个二元操作函数(或函数指针、函数对象),它定义了如何将两个输入元素操作以产生一个输出元素。
下面是一个简单的例子,我们将使用 std::transform 将一个输入范围中的每个元素乘以2,并将结果存储在输出范围中:
#include <algorithm> #include <vector> #include <iostream> #include <iterator> int main() { // int数组处理,每个项乘以10 std::vector<int> inputs = {1, 2, 3, 4}; std::vector<int> outputs(inputs.size()); // 使用transform处理 std::transform(inputs.begin(), inputs.end(), outputs.begin(), [](int x){return x*10;}); // 输出 std::copy(outputs.begin(), outputs.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; std::string str = "hello world!"; // 将string转大写 std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c){return std::toupper(c);}); // 输出 std::copy(str.begin(), str.end(), std::ostream_iterator<unsigned char>(std::cout, " ")); std::cout << std::endl; std::vector<std::string> sinputs = {"abc", "jhk", "hello", "workd"}; std::vector<std::string> soutpus(sinputs.size()); // 将string数组转大写 std::transform(sinputs.begin(), sinputs.end(), soutpus.begin(), [](std::string s){ for(auto &el : s)el = std::toupper(el); return s;}); // 输出 std::copy(soutpus.begin(), soutpus.end(), std::ostream_iterator<std::string>(std::cout, ",")); std::cout << std::endl; return 0; }
在这个例子中,我们使用了一个 lambda 函数 [](int x) { return x * 2; } 作为一元操作函数。这个 lambda 函数接收一个整数参数 x,并返回 x * 2。我们把这个 lambda 函数传递给 std::transform,以便它能够对输入范围中的每个元素执行这个操作。然后,结果被存储在 output 向量中。
运行上述程序,你将看到输出:2 4 6 8 10,这是输入范围中的每个元素乘以2后的结果。
到此这篇关于C++11 std::transform函数使用小结的文章就介绍到这了,更多相关C++11 std::transform内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!