[C++] 基本教程 - std::transform 函数介绍及使用场景

std::transform 函数介绍及使用场景

在 C++ 中,std::transform 是一个非常实用的算法,它可以将一个范围内的元素按照指定的规则进行转换,并将结果存储到另一个范围中。本文将介绍 std::transform 函数的使用方法、使用场景以及一些示例。

1. 函数介绍

std::transform 函数是 C++ 标准库中的一个通用算法。

transform函数的作用是将输入范围内的每个元素通过一元操作函数__unary_op进行处理,并将处理后的结果存储在输出范围内。具体实现过程如下:

  1. 使用while循环遍历输入范围内的每个元素,直到遇到__last
  2. 在循环内部,将当前元素传递给一元操作函数__unary_op,并将返回值存储在输出范围内的当前位置。
  3. 返回输出范围的结束迭代器。

其方法原型如下:

template<typename _InputIterator, typename _OutputIterator,
       typename _UnaryOperation>
    _OutputIterator
    transform(_InputIterator __first, _InputIterator __last,
          _OutputIterator __result, _UnaryOperation __unary_op)


它接受四个参数:

_InputIterator __first:输入范围的起始迭代器。
_InputIterator __last:输入范围的结束迭代器。
_OutputIterator __result:输出范围的起始迭代器。
_UnaryOperation __unary_op:一个一元操作函数,用于对输入范围内的每个元素进行处理。
函数的返回类型是_OutputIterator,即输出范围的结束迭代器。

  template<typename _InputIterator1, typename _InputIterator2,
	   typename _OutputIterator, typename _BinaryOperation>
    _OutputIterator
    transform(_InputIterator1 __first1, _InputIterator1 __last1,
	      _InputIterator2 __first2, _OutputIterator __result,
	      _BinaryOperation __binary_op)

函数参数说明如下:

_InputIterator1 __first1:输入范围的第一个迭代器。
_InputIterator1 __last1:输入范围的最后一个迭代器。
_InputIterator2 __first2:第二个输入范围的第一个迭代器。
_OutputIterator __result:输出迭代器,用于存储映射结果。
_BinaryOperation __binary_op:二元操作,用于对输入范围的元素进行映射。
函数返回值:_OutputIterator,指向映射结果的下一个位置。

使用该函数,必须添加包含算法库“algorithm”。

#include <algorithm>
#include <vector>
#include <iostream>

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

    std::transform(nums.begin(), nums.end(), result.begin(), [](int x) { return x * 2; });

    for (int x : result) {
        std::cout << x << " ";
    }

    return 0;
}

2. 使用场景

2.1 将一个序列中的元素乘以 2

std::transform 函数可以用于将一个序列中的元素按照指定的规则进行转换。例如,我们可以将一个整数向量中的每个元素乘以 2,然后将结果存储到另一个向量中。

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

std::transform(nums.begin(), nums.end(), result.begin(), [](int x) { return x * 2; });

2.2 对两个序列进行逐个元素的组合

std::transform 函数还可以用于对两个序列进行逐个元素的组合。例如,我们可以将两个字符串向量中的对应元素拼接起来,然后将结果存储到一个新的向量中。

std::vector<std::string> str1 = {"Hello", "World"};
std::vector<std::string> str2 = {"!", "?"};
std::vector<std::string> result(str1.size());

std::transform(str1.begin(), str1.end(), str2.begin(), result.begin(), [](const std::string& a, const std::string& b) { return a + b; });

3. 总结

std::transform 函数是 C++ 标准库中的一个通用算法,它可以将一个范围内的元素按照指定的规则进行转换,并将结果存储到另一个范围中。它可以应用于多种场景,如将一个序列中的元素乘以 2、对两个序列进行逐个元素的组合等。掌握 std::transform 函数的使用方法,可以帮助我们更高效地处理各种数据处理任务。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值