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

std::transform 是 C++ 标准库 <algorithm> 中非常实用的函数模板,用于对一个或两个输入序列进行变换,并将结果写入目标区间。它支持一元操作(单个序列)和二元操作(两个序列),使用灵活,常用于数据处理、数学运算等场景。
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);其中:
常见用途包括:取绝对值、平方、转大写等。
示例:将 vector 中每个元素平方
#include <algorithm>
#include <vector>
#include <iostream>
<p>int main() {
std::vector<int> input = {1, 2, 3, 4, 5};
std::vector<int> output(input.size()); // 必须预先分配空间</p><pre class='brush:php;toolbar:false;'>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 <algorithm>
#include <vector>
#include <iostream>
<p>int main() {
std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> result(a.size());</p><pre class='brush:php;toolbar:false;'>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() 开始,至少有与第一个序列相同数量的元素,避免越界。
示例:使用 back_inserter 避免预分配
std::vector<int> input = {1, -2, 3, -4};
std::vector<int> output;
<p>std::transform(input.begin(), input.end(), std::back_inserter(output),
[](int x) { return abs(x); });
// output 自动增长,结果为 {1, 2, 3, 4}</p>注意:若使用普通指针或 begin() 迭代器,必须保证目标区域足够大。
示例:字符串转小写
#include <cctype> std::string s = "Hello World"; std::transform(s.begin(), s.end(), s.begin(), ::tolower); // s 变为 "hello world"
注意:::tolower 是 C 风格函数,需包含 <cctype>;在 lambda 中使用时更安全。
基本上就这些。std::transform 简洁高效,替代手写循环,提升代码可读性与安全性。掌握其两种调用方式和常见搭配,能大幅提升 STL 使用效率。
以上就是c++++中std::transform函数怎么用_c++算法库transform用法详解的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号