首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++的std::transform()

C++的std::transform()

作者头像
叶茂林
发布于 2023-07-30 07:19:52
发布于 2023-07-30 07:19:52
99800
代码可运行
举报
运行总次数:0
代码可运行

在 C++ 标准库中,std::transform() 是一个非常有用的算法函数,它能够将给定范围中的每个元素进行变换,并将变换后的结果存储到另一个范围中。换句话说,它可以通过应用一个指定的操作函数来对容器范围内的元素进行转换。

std::transform() 函数接受四个参数:两个表示输入范围的起始迭代器、一个表示输出范围的起始迭代器和一个可调用对象(即操作函数)。它遍历输入范围内的每个元素,将每个元素传递给操作函数进行处理,然后将结果写入到输出范围。

std::transform() 函数的函数原型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template< class InputIt, class OutputIt, class UnaryOperation >
OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op );

参数解析:

  • first1 和 last1 是表示输入范围的迭代器对,表示要遍历的元素范围。范围为左闭右开区间 [first1, last1)。
  • d_first 是表示输出范围的起始迭代器,指示结果应该存储的位置。
  • unary_op 是一个可调用对象(函数、函数对象或 Lambda 表达式),它将被应用于输入范围内的每个元素,并返回变换后的值。

以下是一个简单示例,展示了如何使用 std::transform() 函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <vector>
#include <algorithm>

// 定义一个函数对象进行元素平方运算
struct Square {
    int operator()(int x) const {
        return x * x;
    }
};

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    std::vector<int> squared_nums(nums.size());

    // 使用函数对象对每个元素进行平方运算并存储到新容器中
    std::transform(nums.begin(), nums.end(), squared_nums.begin(), Square());

    // 打印新容器的元素
    for (const auto& num : squared_nums) {
        std::cout << num << " ";
    }

    return 0;
}

输出结果为:1 4 9 16 25

在这个示例中,我们定义了一个名为 Square 的函数对象,并重载了圆括号操作符,使其可以像函数一样调用。Square 的实例被传递给 std::transform() 函数作为操作函数。在每次调用时,它会将当前元素的值平方并返回。

使用 std::transform() 函数时,我们可以选择使用函数对象、函数指针或 Lambda 表达式作为操作函数。无论我们选择哪种方式,std::transform() 都会自动遍历输入范围内的每个元素,并将每个元素传递给操作函数进行变换,然后将结果写入到输出范围。

总结一下,std::transform() 是一个功能强大的算法函数,可用于对容器中的元素进行变换操作。通过传递操作函数到 std::transform() 中,我们可以避免手动编写循环,并且能够方便地在不同的容器之间进行元素转换。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++11标准库算法:深入理解std::find, std::find_if与std::find_if_not
在C++标准库的<algorithm>头文件中,std::find、std::find_if与std::find_if_not是一组用于元素查找的基础算法。它们通过遍历指定范围,根据不同条件定位首个满足要求的元素,是日常开发中处理容器元素查找的核心工具。C++11标准不仅完善了前两者的使用场景,更新增了std::find_if_not,进一步丰富了条件查找的表达能力。本文将从函数定义、参数特性、使用场景到实现原理,全面解析这三个算法在C++11中的设计与应用。
码事漫谈
2025/07/08
2290
C++11标准库算法:深入理解std::find, std::find_if与std::find_if_not
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
C++ 的 std::transform 函数是 <algorithm> 头文件中的一个通用算法 , 用于对指定范围内的元素进行转换 ;
韩曙亮
2023/12/18
1.7K0
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
不造轮子之STL中集合的交并补
在日常的开发中,常涉及到容器的常见操作,如查找、删除、排序等,C++ STL提供了丰富的算法库,可以方便的完成这些操作。为了避免重复造轮子,同时为了提高效率,了解常见的STL算法是非常有必要的。
程序员的园
2024/09/29
1310
不造轮子之STL中集合的交并补
【C++】STL 算法 - transform 变换算法 ( transform 函数原型 | 将 一个 或 两个 输入容器 中的元素 变换后 存储到 输出容器 中 )
std::transform 是 STL 标准模板库 中的一个算法 , 该算法的作用是 用于对 容器 或 指定迭代器范围 的 每个元素 进行 指定的 " 转换操作 " , 并将 " 转换结果 " 存储到另一个容器中 ;
韩曙亮
2024/01/14
1.3K0
C++拾取——stl标准库中集合交集、并集、差集、对称差方法
STL库中有丰富的集合运算方法,我们可以使用它们快速完成交集、并集、差集、对称差集的运算。(转载请指明出于breaksoftware的csdn博客)
方亮
2020/08/02
2.9K0
C++11 算法详解:std::copy_if 与 std::copy_n
C++11 标准为算法库带来了诸多增强,其中 std::copy_if 和 std::copy_n 作为 std::copy 的补充,为元素复制操作提供了更精细的控制。这两个算法不仅简化了代码逻辑,还提升了可读性和性能。本文将深入探讨这两个算法的实现细节、使用场景及最佳实践,帮助开发者在实际项目中正确高效地应用它们。
码事漫谈
2025/07/08
1290
C++11 算法详解:std::copy_if 与 std::copy_n
C++11 std::uninitialized_copy_n 原理与实现
C++11标准库引入了一系列未初始化内存操作函数,其中std::uninitialized_copy_n作为高效内存管理的利器,在容器实现、高性能计算等场景中发挥着关键作用。与普通的std::copy_n不同,该函数直接在未初始化的内存上构造对象,避免了"先构造后赋值"的额外开销,尤其适用于需要手动管理内存的底层代码。
码事漫谈
2025/07/16
850
C++11 std::uninitialized_copy_n 原理与实现
C++11 划分算法原理解析:is_partitioned、partition_copy与partition_point
std::is_partitioned是C++11引入的非修改序列算法,用于判断给定范围内的元素是否已按指定谓词完成分区。具体而言,若所有满足谓词p的元素都出现在不满足p的元素之前(或范围为空),则返回true,否则返回false。
码事漫谈
2025/07/10
1040
C++11 划分算法原理解析:is_partitioned、partition_copy与partition_point
C++的std::for_each()
当给定一个容器范围,我们通常需要对其中的每个元素执行相同的操作。这样的操作可能包括打印元素、修改元素的值或应用一个自定义函数等等。在 C++ 标准库中,std::for_each() 算法函数提供了一种方便的方式来对容器范围内的元素执行指定的操作。
叶茂林
2023/07/30
7110
C++拾取——stl标准库中集合交集、并集、差集、对等差分方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/breaksoftware/article/details/88932820
方亮
2019/04/11
7.2K0
C++拾取——stl标准库中集合交集、并集、差集、对等差分方法
A+B for Matrices 及 C++ transform的用法
题目大意:给定两个矩阵,矩阵的最大大小是M*N(小于等于10),矩阵元素的值的绝对值小于等于100,求矩阵相加后全0的行以及列数。 1 #include<iostream> 2 using namespace std; 3 #define N 10 4 5 int main() 6 { 7 int n,m,i,j,a[N][N],b[N][N],s; 8 while(cin>>m) 9 { if(m==0) break; 10 cin>>n
猿人谷
2018/01/17
1.1K0
A+B for Matrices  及 C++ transform的用法
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
在 <functional> 头文件 中 , 预定义了 modulus 函数对象 , 这是一个 二元函数对象 , 在该函数对象类中 , 重写了 函数调用操作符 函数 operator() , 该 预定义函数对象 代码如下 :
韩曙亮
2024/01/12
2370
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
C++拾取——使用stl标准库简化代码
        代码是思想的表达。阅读代码是一个猜测、求证的过程。这个过程非常费脑,所以人们都不喜欢啰啰嗦嗦的表达方式。于是在相同认知水平下,简洁高效的表达是喜闻乐见的。本文将抛砖引玉,通过一些案例讲解如何去简化代码。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
1.1K0
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
transform 算法函数原型 : 下面的函数原型作用是 将 一个输入容器 中的元素 变换后 存储到 输出容器 中 ;
韩曙亮
2024/01/15
3330
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
STL学习笔记(16)常用STL算法
组成。 其中常用的功能涉及到比较,交换,查找,遍历,复制,修改,反转,排序,合并等。
轻舞飞扬SR
2021/07/08
5770
8.1 C++ STL 变易拷贝算法
C++ STL中的变易算法(Modifying Algorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入、删除、替换等操作。这些算法同样定义在头文件 <algorithm> 中,它们允许在容器之间进行元素的复制、拷贝、移动等操作,从而可以方便地对容器进行修改和重组。
王 瑞
2023/08/16
3580
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
" 二元函数对象 " 指的是 一个实例类 中 , 重载了 " 函数调用操作符 () " 函数 operator() , 并且该函数 接受 2 个参数 ;
韩曙亮
2024/01/08
3270
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
7.1 C++ STL 非变易查找算法
C++ STL 中的非变易算法(Non-modifying Algorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理、查找、计算等操作,并通过迭代器实现了对序列元素的遍历与访问。由于迭代器与算法是解耦的,因此非变易算法可以广泛地应用于各种容器上,提供了极高的通用性和灵活性。
王 瑞
2023/08/16
4020
C++17 std::inclusive_scan 算法详解
在 C++17 中,std::inclusive_scan 是一个非常有用的算法,它属于 C++ 标准库中的 <numeric> 头文件。std::inclusive_scan 是一个并行算法,用于计算前缀和(或前缀操作),并将结果存储在输出迭代器中。它类似于 std::partial_sum,但有一些重要的区别。
码事漫谈
2025/02/11
1080
C++17 std::inclusive_scan 算法详解
9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。
王 瑞
2023/08/17
2770
推荐阅读
C++11标准库算法:深入理解std::find, std::find_if与std::find_if_not
2290
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
1.7K0
不造轮子之STL中集合的交并补
1310
【C++】STL 算法 - transform 变换算法 ( transform 函数原型 | 将 一个 或 两个 输入容器 中的元素 变换后 存储到 输出容器 中 )
1.3K0
C++拾取——stl标准库中集合交集、并集、差集、对称差方法
2.9K0
C++11 算法详解:std::copy_if 与 std::copy_n
1290
C++11 std::uninitialized_copy_n 原理与实现
850
C++11 划分算法原理解析:is_partitioned、partition_copy与partition_point
1040
C++的std::for_each()
7110
C++拾取——stl标准库中集合交集、并集、差集、对等差分方法
7.2K0
A+B for Matrices 及 C++ transform的用法
1.1K0
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
2370
C++拾取——使用stl标准库简化代码
1.1K0
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
3330
STL学习笔记(16)常用STL算法
5770
8.1 C++ STL 变易拷贝算法
3580
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
3270
7.1 C++ STL 非变易查找算法
4020
C++17 std::inclusive_scan 算法详解
1080
9.1 C++ STL 排序、算数与集合
2770
相关推荐
C++11标准库算法:深入理解std::find, std::find_if与std::find_if_not
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档