当前位置: 首页 > news >正文

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数组处理,每个项乘以10std::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后的结果。

http://www.lryc.cn/news/147783.html

相关文章:

  • JavaScript-DOM查询
  • 大数据-玩转数据-Flink 水印
  • 【Apollo】阿波罗自动驾驶系统:驶向未来的智能出行(含源码安装)
  • 网络-Netty
  • 如何使用vue-smooth-dnd
  • 为AWS认证做好准备:一份全面的备考指南
  • 尚硅谷SpringMVC
  • django的简易的图书管理系统jsp书店进销存源代码MySQL
  • 力扣125. 验证回文串
  • 用WebStorm创建Mock数据
  • Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸
  • 【正点原子STM32连载】第二十四章 高级定时器PWM输入模式实验 摘自【正点原子】APM32F407最小系统板使用指南
  • Adapter Tuning Overview:在CV,NLP,多模态领域的代表性工作
  • velocity一个基于Java的模板引擎
  • 异步servlet
  • 煤矿皮带运输智能监控算法 opencv
  • Docker搭建elasticsearch+kibana测试
  • QT(C++)-QTreeview节点折叠与展开
  • 项目 - 后端技术栈转型方案
  • Oracle权限语句
  • 微信小程序发布一个npm包
  • Pytorch-lightning简介
  • 【ES6】迭代器Iterator
  • 火狐浏览器使用scss嵌套编写css无法识别问题
  • Kotlin的Lambda闭包语法
  • day-01 Docker
  • ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)
  • 思路灰度传感器及红外传感器线序
  • squid服务器
  • spring的后置处理器BeanPostProcessor