安徽天筑建设集团网站,网站服务器空间不足,网站专题报道怎么做,免费申请淘宝账号注册std::transform是C标准库中的一个算法#xff0c;它用于对输入范围内的元素进行操作#xff0c;并将结果存储在输出范围内。这个算法特别适合于将一种数据类型转换为另一种数据类型。 函数定义在头文件algorithm中
std::transform的基本语法如下#xff1a;
std::transfor…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 iteratorint main() { // int数组处理每个项乘以10std::vectorint inputs {1, 2, 3, 4};std::vectorint 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_iteratorint(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_iteratorunsigned char(std::cout, ));std::cout std::endl;std::vectorstd::string sinputs {abc, jhk, hello, workd};std::vectorstd::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_iteratorstd::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后的结果。