C++11 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后的结果。

相关推荐
贾斯汀玛尔斯23 分钟前
每天学一个算法--倒排索引(Inverted Index)
算法·inverted-index
楼田莉子26 分钟前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
小e说说26 分钟前
打破偏科困境:这些学习软件助孩子重燃学习热情
算法
南境十里·墨染春水32 分钟前
C++日志 2——实现单线程日志系统
java·jvm·c++
zh_xuan40 分钟前
api测试工具添加历史记录功能
c++·libcurl·duilib
月昤昽1 小时前
autoCAD二次开发 4.正多边形与collection区分
算法·c#·二次开发·autocad二次开发
休息一下接着来1 小时前
C++ 固定容量环形队列实现
c++·算法
im_AMBER2 小时前
手撕hot100之矩阵!看完这篇就AC~
javascript·数据结构·线性代数·算法·leetcode·矩阵
笨笨饿2 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
如君愿2 小时前
考研复习 Day 30 | 习题--计算机网络 第五章(运输层 上)、数据结构 图(上)
数据结构·计算机网络·课后习题