std::transform是中的函数模板,用于对一个或两个序列应用操作并输出结果。它支持一元变换(如平方、转小写)和二元变换(如对应元素相加),常配合lambda、back_inserter使用,需确保目标空间足够,广泛应用于数据处理与字符串操作等场景。

std::transform 是 C++ 标准库 gorithm> 中非常实用的函数模板,用于对一个或两个输入序列进行变换,并将结果写入目标区间。它支持一元操作(单个序列)和二元操作(两个序列),使用灵活,常用于数据处理、数学运算等场景。
基本语法与头文件
头文件: #include
std::transform 有两种主要重载形式:
1. 一元变换(对单个序列操作)
std::transform(InputIt first, InputIt last, OutputIt result, UnaryOperation op);
2. 二元变换(对两个序列操作)
立即学习“C++免费学习笔记(深入)”;
std::transform(InputIt1 first1, InputIt1 last1, InputIt2 first2, OutputIt result, BinaryOperation op);
其中:
first, last:输入范围的起始和结束迭代器result:输出容器的起始迭代器(需确保空间足够)op:可调用对象(函数指针、lambda、函数对象等)
一元操作:对每个元素进行变换
常见用途包括:取绝对值、平方、转大写等。
示例:将 vector 中每个元素平方
#include #include #includeint main() {std::vector input = {1, 2, 3, 4, 5};std::vector output(input.size()); // 必须预先分配空间
std::transform(input.begin(), input.end(), output.begin(), [](int x) { return x * x; });for (int val : output) { std::cout << val << " ";}// 输出:1 4 9 16 25
}
注意:output 容器必须已有足够空间,否则行为未定义。可用 resize 或构造时指定大小。
二元操作:合并两个序列
从两个输入序列中各取一个元素,应用二元函数,结果写入目标。
示例:将两个 vector 对应元素相加
#include #include #includeint main() {std::vector a = {1, 2, 3};std::vector b = {10, 20, 30};std::vector result(a.size());
std::transform(a.begin(), a.end(), b.begin(), result.begin(), [](int x, int y) { return x + y; });for (int val : result) { std::cout << val << " ";}// 输出:11 22 33
}
要求:第二个序列从 b.begin() 开始,至少有与第一个序列相同数量的元素,避免越界。
常用技巧与注意事项
Lambda 表达式最常用:简洁表达变换逻辑,如 [] (auto& x) { return tolower(x); }支持 STL 容器和原生数组:只要提供正确的迭代器即可目标容器需提前分配空间:可用 resize、reserve + back_inserter(配合 inserter)可结合 std::back_inserter 动态添加元素
示例:使用 back_inserter 避免预分配
std::vector input = {1, -2, 3, -4};std::vector output;std::transform(input.begin(), input.end(), std::back_inserter(output),[](int x) { return abs(x); });// output 自动增长,结果为 {1, 2, 3, 4}
注意:若使用普通指针或 begin() 迭代器,必须保证目标区域足够大。
实际应用场景
字符串转小写:transform(str.begin(), str.end(), str.begin(), ::tolower)数据归一化:对数组每个元素除以最大值结构体字段提取:提取对象中的某个成员组成新序列编码转换:如 ASCII 转十六进制字符串
示例:字符串转小写
#include std::string s = "Hello World";std::transform(s.begin(), s.end(), s.begin(), ::tolower);// s 变为 "hello world"
注意:::tolower 是 C 风格函数,需包含
基本上就这些。std::transform 简洁高效,替代手写循环,提升代码可读性与安全性。掌握其两种调用方式和常见搭配,能大幅提升 STL 使用效率。
以上就是c++++中std::transform函数怎么用_c++算法库transform用法详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478155.html
微信扫一扫
支付宝扫一扫