transform C++标准库算法用法(对容器中元素进行转换操作:大小写转换、向量的加法乘法运算)
std::transform 是 C++ 标准库中的一个算法,用于对容器(如数组、向量、字符串等)中的元素进行转换操作,并将结果存储到指定的目标位置。它可以对单个范围或两个范围的元素进行操作,并将结果写入另一个容器。
1. 头文件
使用 std::transform 需要包含头文件:
#include <algorithm>
2. 函数原型
std::transform 有两种重载形式:
形式 1:对单个范围进行操作
template <class InputIterator, class OutputIterator, class UnaryOperation>
OutputIterator transform(InputIterator first1, InputIterator last1,OutputIterator result, UnaryOperation op);
first1和last1:输入范围的起始和结束迭代器。result:输出范围的起始迭代器。op:一元操作函数,对输入范围的每个元素进行操作。
形式 2:对两个范围进行操作
template <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation>
OutputIterator transform(InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, OutputIterator result,BinaryOperation op);
first1和last1:第一个输入范围的起始和结束迭代器。first2:第二个输入范围的起始迭代器。result:输出范围的起始迭代器。op:二元操作函数,对两个输入范围的对应元素进行操作。
3. 基本用法
示例 1:对单个范围进行操作
将字符串中的每个字符转换为大写:
#include <iostream>
#include <algorithm>
#include <string>int main() {std::string s = "hello";std::transform(s.begin(), s.end(), s.begin(), ::toupper);std::cout << s << std::endl; // 输出: HELLOreturn 0;
}
s.begin()和s.end():输入范围的起始和结束迭代器。s.begin():输出范围的起始迭代器(原地修改)。::toupper:一元操作函数,将字符转换为大写。
示例 2:对两个范围进行操作
将两个向量的对应元素相加:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> v1 = {1, 2, 3};std::vector<int> v2 = {4, 5, 6};std::vector<int> result(v1.size());std::transform(v1.begin(), v1.end(), v2.begin(), result.begin(), std::plus<int>());for (const auto& elem : result) {std::cout << elem << " "; // 输出: 5 7 9}return 0;
}
v1.begin()和v1.end():第一个输入范围的起始和结束迭代器。v2.begin():第二个输入范围的起始迭代器。result.begin():输出范围的起始迭代器。std::plus<int>():二元操作函数,将两个元素相加。
4. 自定义操作函数
示例 3:使用 Lambda 表达式
将向量中的每个元素平方:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> v = {1, 2, 3};std::vector<int> result(v.size());std::transform(v.begin(), v.end(), result.begin(), [](int x) { return x * x; });for (const auto& elem : result) {std::cout << elem << " "; // 输出: 1 4 9}return 0;
}
[](int x) { return x * x; }:Lambda 表达式,定义了一个一元操作函数。
示例 4:使用函数对象
将两个字符串的对应字符拼接:
#include <iostream>
#include <algorithm>
#include <string>struct Concat {std::string operator()(char a, char b) const {return std::string(1, a) + std::string(1, b);}
};int main() {std::string s1 = "abc";std::string s2 = "123";std::vector<std::string> result(s1.size());std::transform(s1.begin(), s1.end(), s2.begin(), result.begin(), Concat());for (const auto& elem : result) {std::cout << elem << " "; // 输出: a1 b2 c3}return 0;
}
Concat:函数对象,定义了一个二元操作函数。
5. 注意事项
-
输出范围的大小:
- 输出范围必须足够大,以容纳转换后的结果。否则会导致未定义行为。
- 可以使用
std::back_inserter将结果插入到动态容器中:std::vector<int> result; std::transform(v.begin(), v.end(), std::back_inserter(result), [](int x) { return x * x; });
-
原地修改:
- 如果输入范围和输出范围相同,
std::transform会原地修改数据。
- 如果输入范围和输出范围相同,
-
性能:
std::transform的时间复杂度为 O(n),其中 n 是输入范围的大小。
6. 总结
std::transform 主要特点包括:
- 支持对单个范围或两个范围的操作。
- 可以使用内置函数、Lambda 表达式或自定义函数对象作为操作函数。
- 可以原地修改数据,也可以将结果存储到另一个容器中。
相关文章:
transform C++标准库算法用法(对容器中元素进行转换操作:大小写转换、向量的加法乘法运算)
std::transform 是 C 标准库中的一个算法,用于对容器(如数组、向量、字符串等)中的元素进行转换操作,并将结果存储到指定的目标位置。它可以对单个范围或两个范围的元素进行操作,并将结果写入另一个容器。 1. 头文件 …...
Java File 类与文件操作
一、引言 在 Java 编程中,文件操作是一项非常常见且重要的任务。无论是读取配置文件、保存用户数据,还是进行日志记录,都离不开对文件的操作。Java 提供了 File 类来表示文件和目录的抽象路径名,通过该类可以对文件和目录进行创建、删除、重命名等操作。同时,Java 还提供…...
Python 字符串的编码格式
在 Python 中,字符串(str)默认使用 Unicode 编码,具体来说,Python 3 中的字符串是以 UTF-8 编码存储的 Unicode 字符序列。Unicode 是一种国际标准,旨在为世界上所有的字符提供唯一的编码,而 UTF-8 是 Unicode 的一种实现方式,具有兼容性和高效性。 1. Unicode 与 UTF-…...
RPA+AI 技术到底好在哪里?
在自动化领域,RPA与生成式AI都是强大的技术,都可以用来实现自动执行重复耗时的任务。 主要区别是:传统RPA擅长处理结构化与规则明确简单的流程,而在非结构化数据处理、动态上下文适应、智能决策等能力上有欠缺;而基于…...
flowable适配达梦7 (2.1)
经过第一版的问题解决,后端项目可以启动,前端页面也集成进去。 前端在流程设计页面报错 之后发现主要是组件中modelerStore这个值没有 解决方法:在data增加对象 给component/process/designer.vue 中涉及到的每个子组件传入 :modelerStore“modeler…...
基于java的ssm+JSP+MYSQL的母婴用品网站(含LW+PPT+源码+系统演示视频+安装说明)
系统功能 管理员功能模块: 主页 个人中心 用户管理 商品分类管理 商品信息管理 留言板管理 成长交流 系统管理 订单管理 留言管理 用户功能模块: 主页 个人中心 我的收藏管理 订单管理 前台首页功能模块: 首页 商品信息 论…...
面试八股 —— Redis篇
重点:缓存 和 分布式锁 缓存(穿透,击穿,雪崩) 降级可作为系统的保底策略,适用于穿透,击穿,雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 缓存——双写一致性 1.强一致性业务(…...
gradle-8.13
gradle-8.13 稍微看了下,基于Maven改造的 https://gradle.org/install/https://github.com/gradle/gradle-distributions/releaseshttps://github.com/gradle/gradle-distributions/releases/download/v8.13.0/gradle-8.13-all.zip https://github.com/gradle/gra…...
不使用负压电源,ADC如何测量正负压?
电路图来自ZLinear的开源数据采集板卡DL8884_RFN,是一个比较常见的电压偏置采集法 对电路进行分析,所以说可以先看下采集卡的模拟输入部分的参数如下: 通道数量: 8通道单端输入/4通道差分输入 分辨率: 16位逐次逼近型(SAR) ADC 采样速率: 40…...
在 Linux 系统上部署 Deepseek AI 的全面指南
对于所有希望亲身体验 AI 魅力的玩家来说,本文将提供一个详尽的教程,指导你在 Linux 系统上部署 Deepseek AI。无论你是技术小白还是有一定基础的用户,都能轻松跟随本文完成部署。 一、关于 Ollama Ollama 是一款功能强大的开源应用&am…...
SinoSteel生产企业ERP实施建议书final(143页PPT)(文末有下载方式)
资料解读:SinoSteel 生产企业 ERP 实施建议书 final 详细资料请看本解读文章的最后内容。 在当今竞争激烈的商业环境中,企业的信息化建设对于提升竞争力和实现可持续发展至关重要。中钢集团作为一家大型跨国企业集团,在钢铁行业占据重要地位。…...
贴片陶瓷天线和蓝牙天线的layout注意事项
板载天线,也有封装成器件进行使用: 看到这里,细心的人发现,天线接入芯片的时候,旁边也直接接地了: F型天线(Inverted F Antenna, IFA)的一端接地,看起来像是“短路”&am…...
关于波士顿动力2025年3月的人形机器人最新视频
这是完整的视频: 波士顿动力最新逆天表演-机器人Atlas行走、奔跑、爬行、杂技_哔哩哔哩_bilibili 至少从目前来看,综合对比运动的幅度、各关节的协调性、整体的顺遂性、动作的拟人程度,波士顿动力是已知人形机器人中最好的。 尤其需要关注…...
fontTools工具的使用介绍
前言 python工具库fontTools,我是用来压缩前端字体的,优化前端请求速度的;使用的过程中,遇到了不少的坑,把这个过程记录下来,防止再犯。 安装 # fontTools 4.56.0 pip install fontTools提取子字体集 方…...
深入理解计算机网络:OSI 与 TCP/IP 各层结构与功能
目录 1. 引言 2. OSI 模型 2.1 OSI 各层的详细功能 2.1.1 物理层 2.1.2 数据链路层 2.1.3 网络层 2.1.4 传输层 2.1.5 会话层 2.1.6 表示层 2.1.7 应用层 3. TCP/IP 模型 3.1 TCP/IP 各层的详细功能 3.1.1 网络接口层 3.1.2 网络层 3.1.3 传输层 3.1.4 应用层 …...
Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)
1. NAN 数据通信架构 1.1 单播支持 要在两个NAN设备之间启动单播数据通信,服务需发起一个NAN数据路径(NDP,NAN Data Path)请求。这对NAN设备之间会建立一个NAN设备链路(NDL,NAN Device Link)&…...
Arduino示例代码讲解:Multiple tone player 多音播放器
Arduino示例代码讲解:Multiple tone player 多音播放器 Multiple tone player 多音播放器代码功能代码逐行解释1. 注释部分2. `setup()` 函数3. `loop()` 函数硬件连接**扬声器连接**:**Arduino板**:运行结果修改建议关于`tone()`和`noTone()`函数视频讲解Multiple tone pla…...
Windows电脑 打开 Docker Desktop 提示的“Virtual Machine Platform not enabled”的问题解决
文章目录 问题来源解决方案 问题来源 因为要在本地推送 docker 镜像 到镜像库,所以安装了 Docker Desktop ,刚开始是好的,后来因为要调试 uniapp 安卓App,又装了雷电模拟器。然后就冲突了,打不开 Docker Desktop了&am…...
【愚公系列】《高效使用DeepSeek》020-专业术语解释
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
1.环境搭建VUE+Spring boot
一.vue 环境搭建 Spring Boot 和 Vue,可以实现前后端分离的架构,提高开发效率和应用性能。Spring Boot 负责后端逻辑和数据处理,Vue 负责前端展示和用户交互。 1.1安装node.js 这个是是安装在个人电脑上 直接在官网下载然后安装即可&…...
第二十七篇 数据仓库与维度建模指南:从理论到实战的进阶之路
声明:文章内容仅供参考,需仔细甄别。文中技术名称属相关方商标,仅作技术描述;代码示例为交流学习用途,部分参考开源文档(Apache 2.0/GPLv3);案例数据已脱敏,技术推荐保持…...
【Unity3D】Addressables使用流程
Package Manager - 搜索 Addressables 安装 Window -> Asset Management -> Addressables 打开窗口 New -> 新建Packed Assets 资源组 默认资源组Default xxx (Default) 将资源,如预制体直接拖拽进资源组 Build -> New Build -> Default Buil…...
在Oracle Linux 7上安装Oracle 11gr2数据库
好久没有安装Oracle 11g了,虽然是老版本,但是还是有很多公司在用,自从有了oracle linux感觉安装变简单了。 1.安装先决条件包,此包会配置系统参数,建立oracle用户等: yum install oracle-rdbms-server-11gR2-preinstall 安装完这个oracle自…...
python爬虫概述
0x00 python爬虫概述 以豆瓣的选电影模块为例,当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的 这时服务器的工作方式应该是这样的 客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码) 当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据…...
Umi从零搭建Ant Design Pro项目(2)
文章目录 前言一、新增登录页面1.登录页面代码2.登录处理3.修改app.tsx 二、说一下逻辑1. 流程图2. 注意点 总结 前言 前面写了创建项目及修改一些配置。这一章写写登录页面。 一、新增登录页面 新增登录页面,会涉及Umi的目录结构。先看一下文档再动手。 1.登录页…...
nginx 配置ip黑白名单
配置ip白名单 nginx.conf内容,以server模块的配置为例。其中,allow和deny可以在http,server,location中配置。 server {listen 80;server_name localhost;# 白名单配置allow 192.168.3.7; # 允许单个IPallow 192.168.3.9…...
【C++】STL库面试常问点
STL库 什么是STL库 C标准模板库(Standard Template Libiary)基于泛型编程(模板),实现常见的数据结构和算法,提升代码的复用性和效率。 STL库有哪些组件 STL库由以下组件构成: ● 容器…...
Qt 控件概述 QWdiget 1.1
目录 qrc机制 qrc使用 1.在项目中创建一个 qrc 文件 2.将图片导入到qrc文件中 windowOpacity: cursor 光标 cursor类型 自定义Cursor font tooltip focusPolicy styleSheet qrc机制 之前提到使用相对路径的方法来存放资源,还有一种更好的方式…...
python 数据可视化matplotib库安装与使用
要使用 matplotlib 库进行数据可视化,首先你需要确保已经安装了该库。如果你还没有安装,可以通过 Python 的包管理器 pip 来安装它。在你的命令行工具中运行以下命令来安装 matplotlib: pip install matplotlib安装完成后,你就可以…...
C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)
BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个,每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍,留下Luck 以及 路由器相关的 端口记录信息。 (因为自…...
