C++11 std::transform函数使用说明

这篇具有很好参考价值的文章主要介绍了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后的结果。文章来源地址https://www.toymoban.com/news/detail-687075.html

到了这里,关于C++11 std::transform函数使用说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习竞赛进阶技巧 - BLIP使用说明与实战

    BLIP-2: Scalable Pre-training of Multimodal Foundation Models for the World’s First Open-source Multimodal Chatbot 由于大规模模型的端到端的训练,视觉与语言的预训练模型的成本越来越高。本文提出了BLIP-2,这是一种通用的有效的预训练策略,它从现成的冷冻预训练图像编码器与大型的语言模型中

    2024年02月01日
    浏览(29)
  • Python pkgutil基础使用说明

    pkgutil 是Python的标准库中的一个模块,提供了一系列与包(Package)相关的工具函数,例如动态加载包、递归遍历包内的子模块等。在本篇教程中,我们将带你详细了解 pkgutil 模块的主要功能及使用方法。 pkgutil 模块是Python标准库中的一个工具模块,它提供了一系列与包相关的

    2024年02月09日
    浏览(27)
  • stm32标准库开发常用函数的使用和代码说明

    用于控制端口的读写操作。 GPIO_Init:初始化GPIO端口。 GPIO_WritePin、GPIO_ReadPin:写入或读取指定GPIO引脚的状态。 GPIO_SetPin:设置指定GPIO引脚的状态为高电平。 GPIO_ResetPin:将指定GPIO引脚的状态复位为低电平。 用于管理中断相关操作。 NVIC_EnableIRQ:使能指定的中断。 NVIC_Disab

    2024年02月15日
    浏览(28)
  • 【物联网】stm32标准库开发常用函数的使用和代码说明

    用于控制端口的读写操作。 GPIO_Init:初始化GPIO端口。 GPIO_WritePin、GPIO_ReadPin:写入或读取指定GPIO引脚的状态。 GPIO_SetPin:设置指定GPIO引脚的状态为高电平。 GPIO_ResetPin:将指定GPIO引脚的状态复位为低电平。 用于管理中断相关操作。 NVIC_EnableIRQ:使能指定的中断。 NVIC_Disab

    2024年02月14日
    浏览(27)
  • 超维空间S2无人机使用说明书——11、使用3维激光雷达实现ROS无人机的精准定位

    一、视频演示 视频演示: 3D雷达定位效果展示 二、源码连接 后续补充 三、启动雷达节点,确保雷达发布数据 未出现红色报错,表明程序运行正常 launch文件详解

    2024年01月23日
    浏览(37)
  • Matlab实现ADF检验,adftest函数使用详细说明(看完就会用)

    ADF检验全称为Augmented Dickey-Fuller test。通常在使用时间序列模型(如ARMA,ARIMA)的时候用于检验时间序列数据的平稳性。他主要通过检验数据是否有单位根判断序列是否平稳。 输入参数: y:进行检验的时间序列 输出参数: h:检验结果 h = 0,说明序列不平稳; h = 1,说明序列

    2023年04月24日
    浏览(34)
  • 05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域

    对应输出如上,没有使用len()函数,对应的子算出字符的长度,但是代码整体写的就很别扭。代码过于重复,代码中唯一不一样的地方就是被统计的字符串不同。同时对应的,代码整体也就会比较低效。可以使用函数,优化过程,先定义函数。 同样的输出,效果一样,两者

    2024年01月19日
    浏览(46)
  • 超维空间S2无人机使用说明书——51、基础版——使用yolov8进行目标跟踪

    硬件:D435摄像头,Jetson orin nano 8G 环境:ubuntu20.04,ros-noetic, yolov8 注:目标跟随是在木根识别的基础上进行,因此本小节和yolov8识别小节类似,只是在此基础上添加了跟随控制程序 步骤一: 启动摄像头,获取摄像头发布的图像话题 没有出现红色报错,出现如下界面,表明摄

    2024年02月03日
    浏览(31)
  • appemit 支持chrome edge谷歌微软浏览器佳博Gprinter 标签打印机 TSCLIB.DLL 函数库使用说明

    支持谷歌 firefox edge 360 qq sogou等各种浏览器,在线使用 佳博Gprinter 标签打印机 直接js操作 TSCLIB.DLL 函数库使用说明 请在使用TSCLIB.DLL 前,安装条形码打印机驱动程序。 1. openport(a) 说明: 指定计算机端的输出端口 参数: a: 单机打印时,请指定打印机驱动程序名称,例如: TSC TDP

    2024年02月04日
    浏览(35)
  • 【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )

    \\\" 二元函数对象 \\\" 指的是 一个实例类 中 , 重载了 \\\" 函数调用操作符 () \\\" 函数 operator() , 并且该函数 接受 2 个参数 ; 如果 \\\" 重载 函数调用操作符 () 函数 \\\" 只接收一个参数 , 那么这个函数对象就是 一元函数对象 ; 下面的结构体类 函数对象 , 就是一个二元函数对象 , 其作用是将

    2024年01月18日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包