目录

1. 说明

2. 用法示例


1. 说明

std::transform 是一种多功能算法,用于将已知函数应用于一个或多个范围内的元素并将结果存储在输出范围内。它主要有两种形式:一元运算和二元运算。具体来说是在 <algorithm> 标头中。函数声明:

template< class InputIt, class OutputIt, class UnaryOp >

OutputIt transform( InputIt first1, InputIt last1,

                    OutputIt d_first, UnaryOp unary_op );

(1)

(constexpr since C++20)

template< class ExecutionPolicy,

          class ForwardIt1, class ForwardIt2, class UnaryOp >
ForwardIt2 transform( ExecutionPolicy&& policy,
                      ForwardIt1 first1, ForwardIt1 last1,

                      ForwardIt2 d_first, UnaryOp unary_op );

(2)

(since C++17)

template< class InputIt1, class InputIt2,

          class OutputIt, class BinaryOp >
OutputIt transform( InputIt1 first1, InputIt1 last1, InputIt2 first2,

                    OutputIt d_first, BinaryOp binary_op );

(3)

(constexpr since C++20)

template< class ExecutionPolicy,

          class ForwardIt1, class ForwardIt2,
          
class ForwardIt3, class BinaryOp >
ForwardIt3 transform( ExecutionPolicy&& policy,
                      ForwardIt1 first1, ForwardIt1 last1,
                      ForwardIt2 first2,

                      ForwardIt3 d_first, BinaryOp binary_op );

(4)

(since C++17)

一元操作的函数相当于:Ret fun(const Type &a);

二元操作的函数相当于:Ret fun(const Type1 &a, const Type2 &b);

即传进去的是一个函数对象。

2. 用法示例

#include <algorithm>

#include <cctype>

#include <iomanip>

#include <iostream>

#include <string>

#include <utility>

#include <vector>

 

void print_ordinals(const std::vector<unsigned>& ordinals)

{

    std::cout << "ordinals: ";

    for (unsigned ord : ordinals)

        std::cout << std::setw(3) << ord << ' ';

    std::cout << '\n';

}

 

char to_uppercase(unsigned char c)

{

    return std::toupper(c);

}

 

void to_uppercase_inplace(char& c)

{

    c = to_uppercase(c);

}

 

void unary_transform_example(std::string& hello, std::string world)

{

    // string就地转化为大写形式

 

    std::transform(hello.cbegin(), hello.cend(), hello.begin(), to_uppercase);

    std::cout << "hello = " << std::quoted(hello) << '\n';

 

    // for_each version (see Notes above)

    std::for_each(world.begin(), world.end(), to_uppercase_inplace);

    std::cout << "world = " << std::quoted(world) << '\n';

}

 

void binary_transform_example(std::vector<unsigned> ordinals)

{

    // 将数转换为double

 

    print_ordinals(ordinals);

 

    std::transform(ordinals.cbegin(), ordinals.cend(), ordinals.cbegin(),

                   ordinals.begin(), std::plus<>{});

 //或使用 std::plus<>()

    print_ordinals(ordinals);

}

 

int main()

{

    std::string hello("hello");

    unary_transform_example(hello, "world");

 

    std::vector<unsigned> ordinals;

    std::copy(hello.cbegin(), hello.cend(), std::back_inserter(ordinals));

    binary_transform_example(std::move(ordinals));

}

输出:

hello = "HELLO"

world = "WORLD"

ordinals:  72  69  76  76  79

ordinals: 144 138 152 152 158

说明:std::quoted 是 C++14 中引入的 I/O 操作符,属于 <iomanip> 库的一部分。其主要目的是简化使用流进行输入输出操作时对带引号的字符串的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89644.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89644.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89644.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程

文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发文件系统&#xff0c;临时进行学习开发&#xff0c;系统上线3年未出没有大问题。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 嵌入式 .net mvc 开发&#xff…

OpenCV图像边缘检测

一、边缘检测基础概念 边缘检测是图像处理中最基本也是最重要的操作之一&#xff0c;它能识别图像中亮度或颜色急剧变化的区域&#xff0c;这些区域通常对应物体的边界。OpenCV提供了多种边缘检测方法&#xff0c;从传统的算子到基于深度学习的现代方法。 1.1 为什么需要边缘…

(Arxiv-2024)自回归模型优于扩散:Llama用于可扩展的图像生成

自回归模型优于扩散&#xff1a;Llama用于可扩展的图像生成 paper是香港大学发布在Arxiv2024的工作 paper title:Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation Code:链接 Abstract 我们介绍了LlamaGen&#xff0c;一种新的图像生成模型系列&am…

高频SQL50题 第九天 | 1164. 指定日期的产品价格、1204. 最后一个能进入巴士的人、1907. 按分类统计薪水

1164. 指定日期的产品价格 题目链接&#xff1a;https://leetcode.cn/problems/product-price-at-a-given-date/description/?envTypestudy-plan-v2&envIdsql-free-50 状态&#xff1a;已完成 考点&#xff1a; group by select语句中使用聚合函数max()&#xff1a;获取…

Java内存模型(JMM)深度解析

1. 引言 在当今多核处理器和并发编程盛行的时代&#xff0c;Java工程师们在构建高性能、高可用系统时&#xff0c;常常会面临复杂的线程安全挑战。数据不一致、竞态条件、死锁等问题&#xff0c;不仅难以调试&#xff0c;更可能导致系统行为异常。这些问题的根源&#xff0c;往…

参数仅 12B! FLUX.1-Kontext-dev 实现高效文本驱动图像编辑,性能媲美 GPT-4o

FLUX.1-Kontext-dev 是由 Black Forest Labs 团队于 2025 年 6 月 26 日联合发布的生成与编辑图像的流匹配&#xff08;flow matching&#xff09;模型。FLUX.1 Kontext 的图像编辑是广泛意义上的图像编辑&#xff0c;不仅支持图像局部编辑&#xff08;对图像中的特定元素进行针…

Robot---能打羽毛球的机器人

1 前言 Robot系列主要介绍一些比较有意思的机器人&#xff0c;前面的博客文章中也给读者朋友们展示了一些&#xff1a; 《人形机器人---越来越像人了》 《自动驾驶---两轮自行车的自主导航》 《自动驾驶---会打架的“球形机器人”》 《Robot---SPLITTER行星探测机器人》 《Robo…

浏览器默认非安全端口列表

浏览器默认非安全端口列表: https://chromium.googlesource.com/chromium/src.git//refs/heads/master/net/base/port_util.cc 0, // Not in Fetch Spec.1, // tcpmux7, // echo9, // discard11, // systat13, // daytime15, // netstat17, …

在线租房平台源码+springboot+vue3(前后端分离)

大家好&#xff0c;今天给大家带来一个非常完善的 在线租房平台。大家可用学习下系统的设计和源码风格。 视频演示 在线租房平台源码springbootvue3 图片演示 技术栈 后端 技术框架&#xff1a;JDK8SpringBoot Mybatis-Plus 数据库&#xff1a;Mysql8 前端 核心框架 - Vue…

android核心技术摘要

Android APP 默认赋予权限apk签名 apk签名&#xff1a;https://blog.csdn.net/u014763302/article/details/149055647apksign使用反法&#xff1a;[https://www.cnblogs.com/fengxing999/p/11978037.html]从Android源码生成系统签名文件&#xff1a;https://blog.csdn.net/wenz…

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

背景&#xff1a; 在进行深度学习算法的环境部署时&#xff0c;由于生产服务器被彻底隔离外网&#xff0c;只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到离线 Windows 服务器。 其中一运行labelimg就报错&#xff1a; Fatal error in launcher: Unable to creat…

vue3+原生javascript 手写日期时间选择框 滚动选择可输入

需求&#xff1a; web端 想要跟手机端一样选择年月日时分&#xff0c;通过滚动选择 实现效果图&#xff1a; 理念&#xff1a; 1.年月日时分 分别为单个输入框&#xff0c;用来做输入修改 2.div把输入框拼接起来&#xff0c;显示出一个日期框的样子 3.年月日时分 下拉给默…

Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类

最近由于业务需求&#xff0c;接触到了Jetson边缘AI计算主板&#xff0c;博主使用的是Jetson Orin NX 16GB这个版本&#xff0c;可以看到其算力达到了100TOPS&#xff0c;这是一个非常恐怖的算力了&#xff0c;接下来便是博主对其的环境配置过程&#xff0c;博主要在该主板上运…

CLIP模型实现中的其他细节

之前已经完整的拆解了CLIP中所用到的ResNet、ViT和Transformer三个模型&#xff08;CLIP拆解-CSDN博客&#xff09;&#xff0c;这篇将讲解model.py实现中的其他细节。 1.关于ResNet模型中vision_head的设置 ResNet: vision_heads vision_width * 32 // 64 ViT: vision_h…

国科大深度学习作业1-手写数字识别实验

背景介绍&#xff1a;单位实习&#xff0c;趁机摸鱼&#xff0c;由于电脑只安装了VSCode&#xff0c;所以算是从环境搭建写起。 目录 一、环境搭建 1. 安装Anaconda 2. 创建Python环境 3. 安装PyTorch 4. 安装其他必要库 二、在 VSCode 中配置环境 1. 安装Pytho…

基于Spring Boot的绿园社区团购系统的设计与实现

第1章 摘 要 本设计与实现的基于Spring Boot的绿园社区团购系统&#xff0c;旨在为社区居民提供一套高效、便捷的团购购物解决方案。随着电子商务的发展和社区居民对便捷购物需求的增加&#xff0c;传统的团购模式已无法满足用户的个性化需求。本系统通过整合现代化技术&…

【51单片机四位数码管从0循环显示到99,每0.5秒增加一个数字,打击键计数】2022-6-11

缘由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断计时 秒 分 时 毫秒 unsigned int shu0; //bit Mb0;//…

如何通过python脚本向redis和mongoDB传点位数据

向MongoDB传数据 from pymongo import MongoClient #导入库对应的库localhost "172.16.0.203" #数据库IP地址 baseName "GreenNagoya" client MongoClient(localhost, 27017, username"admin", password"zdiai123") #数…

昆仑通泰触摸屏Modbus TCP服务器工程 || TCP客户端工程

目录 一、Modbus TCP服务端 1.设备地址 2.实操及数据 二、Modbus TCP客户端 1.结果及协议解析 一、Modbus TCP服务端 1.设备地址 --单元标识符 DI输入/4个离散输入 DO输出/单个线圈输出 输入寄存器 读输入寄存器操作&#xff0c;写输入寄存器操作 保持寄存器 …

PyTorch 安装使用教程

一、PyTorch 简介 PyTorch 是由 Facebook AI Research 团队开发的开源深度学习框架。它以动态图机制、灵活性强、易于调试而著称&#xff0c;广泛应用于自然语言处理、计算机视觉和学术研究。 二、安装 PyTorch 2.1 通过官网选择安装命令&#xff08;推荐&#xff09; 访问官…