前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++的std::transform()

C++的std::transform()

作者头像
叶茂林
发布于 2023-07-30 07:19:52
发布于 2023-07-30 07:19:52
93900
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不造轮子之STL中集合的交并补
在日常的开发中,常涉及到容器的常见操作,如查找、删除、排序等,C++ STL提供了丰富的算法库,可以方便的完成这些操作。为了避免重复造轮子,同时为了提高效率,了解常见的STL算法是非常有必要的。
程序员的园
2024/09/29
1040
不造轮子之STL中集合的交并补
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
C++ 的 std::transform 函数是 <algorithm> 头文件中的一个通用算法 , 用于对指定范围内的元素进行转换 ;
韩曙亮
2023/12/18
1.6K0
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
【C++】STL 算法 - transform 变换算法 ( transform 函数原型 | 将 一个 或 两个 输入容器 中的元素 变换后 存储到 输出容器 中 )
std::transform 是 STL 标准模板库 中的一个算法 , 该算法的作用是 用于对 容器 或 指定迭代器范围 的 每个元素 进行 指定的 " 转换操作 " , 并将 " 转换结果 " 存储到另一个容器中 ;
韩曙亮
2024/01/14
1.2K0
C++拾取——stl标准库中集合交集、并集、差集、对称差方法
STL库中有丰富的集合运算方法,我们可以使用它们快速完成交集、并集、差集、对称差集的运算。(转载请指明出于breaksoftware的csdn博客)
方亮
2020/08/02
2.8K0
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标准库中集合交集、并集、差集、对等差分方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/breaksoftware/article/details/88932820
方亮
2019/04/11
7.2K0
C++拾取——stl标准库中集合交集、并集、差集、对等差分方法
C++的std::for_each()
当给定一个容器范围,我们通常需要对其中的每个元素执行相同的操作。这样的操作可能包括打印元素、修改元素的值或应用一个自定义函数等等。在 C++ 标准库中,std::for_each() 算法函数提供了一种方便的方式来对容器范围内的元素执行指定的操作。
叶茂林
2023/07/30
6490
7.1 C++ STL 非变易查找算法
C++ STL 中的非变易算法(Non-modifying Algorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理、查找、计算等操作,并通过迭代器实现了对序列元素的遍历与访问。由于迭代器与算法是解耦的,因此非变易算法可以广泛地应用于各种容器上,提供了极高的通用性和灵活性。
王 瑞
2023/08/16
3700
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
在 <functional> 头文件 中 , 预定义了 modulus 函数对象 , 这是一个 二元函数对象 , 在该函数对象类中 , 重写了 函数调用操作符 函数 operator() , 该 预定义函数对象 代码如下 :
韩曙亮
2024/01/12
2190
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
transform 算法函数原型 : 下面的函数原型作用是 将 一个输入容器 中的元素 变换后 存储到 输出容器 中 ;
韩曙亮
2024/01/15
2940
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
C++拾取——使用stl标准库简化代码
        代码是思想的表达。阅读代码是一个猜测、求证的过程。这个过程非常费脑,所以人们都不喜欢啰啰嗦嗦的表达方式。于是在相同认知水平下,简洁高效的表达是喜闻乐见的。本文将抛砖引玉,通过一些案例讲解如何去简化代码。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
1.1K0
C++17 std::inclusive_scan 算法详解
在 C++17 中,std::inclusive_scan 是一个非常有用的算法,它属于 C++ 标准库中的 <numeric> 头文件。std::inclusive_scan 是一个并行算法,用于计算前缀和(或前缀操作),并将结果存储在输出迭代器中。它类似于 std::partial_sum,但有一些重要的区别。
码事漫谈
2025/02/11
930
C++17 std::inclusive_scan 算法详解
STL学习笔记(16)常用STL算法
组成。 其中常用的功能涉及到比较,交换,查找,遍历,复制,修改,反转,排序,合并等。
轻舞飞扬SR
2021/07/08
5550
8.1 C++ STL 变易拷贝算法
C++ STL中的变易算法(Modifying Algorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入、删除、替换等操作。这些算法同样定义在头文件 <algorithm> 中,它们允许在容器之间进行元素的复制、拷贝、移动等操作,从而可以方便地对容器进行修改和重组。
王 瑞
2023/08/16
3250
万字长文【C++】函数式编程【上】
https://www.manning.com/books/functional-programming-in-c-plus-plus
用户9831583
2022/06/16
2.8K0
万字长文【C++】函数式编程【上】
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
" 二元函数对象 " 指的是 一个实例类 中 , 重载了 " 函数调用操作符 () " 函数 operator() , 并且该函数 接受 2 个参数 ;
韩曙亮
2024/01/08
2970
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
10.1 C++ STL 模板适配与迭代器
STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。模板适配器是指一组模板类或函数,它们提供一种适配机制,使得现有的模板能够适应新的需求。而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,通过迭代器可以遍历STL容器中的元素。适配器与迭代器两者的紧密配合,使得开发者能够高效地处理容器中的元素,提高了代码的复用性和可维护性。
王 瑞
2023/10/11
2580
9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。
王 瑞
2023/08/17
2480
从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
s1mba
2017/12/28
7050
从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
C++ STL算法系列5---equal() , mismatch()
equal和mismatch算法的功能是比较容器中的两个区间内的元素。这两个算法各有3个参数first1,last1和first2.如果对 于区间[first1,last1)内所有的first1+i,first1+i和first2所在位置处的元素都相等,则equal算法返回真,否则返 回假。mismatch算法的返回值是由两个迭代器first1+i和first2+i组成的一个pair,表示第1对不相等的元素的位置。如果没有找到 不相等的元素,则返回last1和first2+(last1-first1)。因此
猿人谷
2018/01/17
7800
推荐阅读
不造轮子之STL中集合的交并补
1040
【C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )
1.6K0
【C++】STL 算法 - transform 变换算法 ( transform 函数原型 | 将 一个 或 两个 输入容器 中的元素 变换后 存储到 输出容器 中 )
1.2K0
C++拾取——stl标准库中集合交集、并集、差集、对称差方法
2.8K0
A+B for Matrices 及 C++ transform的用法
1.1K0
C++拾取——stl标准库中集合交集、并集、差集、对等差分方法
7.2K0
C++的std::for_each()
6490
7.1 C++ STL 非变易查找算法
3700
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
2190
【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )
2940
C++拾取——使用stl标准库简化代码
1.1K0
C++17 std::inclusive_scan 算法详解
930
STL学习笔记(16)常用STL算法
5550
8.1 C++ STL 变易拷贝算法
3250
万字长文【C++】函数式编程【上】
2.8K0
【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )
2970
10.1 C++ STL 模板适配与迭代器
2580
9.1 C++ STL 排序、算数与集合
2480
从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
7050
C++ STL算法系列5---equal() , mismatch()
7800
相关推荐
不造轮子之STL中集合的交并补
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验