C++ std::transform使用方法与代码演示

本文详细介绍了C++标准库中的std::transform函数,包括其一元操作和二元操作的使用方法。std::transform可用于在指定范围内应用函数或操作,并将结果存储到另一个范围。示例代码展示了如何使用std::transform进行元素相加和数值增加的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  std::transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内。要使用std::transform函数需要包含<algorithm>头文件。
  std::transform有两个重载方法,一个是对应于一元操作,一个是对应于二元操作。

std::transform 二元操作

  std::transform(first1, last1, first2, result, func);

  对于二元操作,使用[first1, last1)范围内的每个元素作为第一个参数调用func, 并以first2开头的范围内的每个元素作为第二个参数调用func, 每次调用返回的值都存储在以result开头的范围内。给定的func将被连续调用last1-first1次。func可以是函数指针或函数对象或lambda表达式。

std::transform 一元操作

  std::transform(first1, last1, result, func);

  对于一元操作,将func应用于[first1,last1)范围内的每个元素,并将每个操作返回的值存储在以result开头的范围内。给定的op将被连续调用last1-first1次。func可以是函数指针或函数对象或lambda表达式。

示例代码

/*

std::transform用法

*/

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

using namespace std;

int value_increase(int i){ return i + 5; }

/*

std::transform 二元操作

std::transform(first1, last1, first2, result, func);

对于二元操作,使用[first1, last1)范围内的每个元素作为第一个参数调用func,
并以first2开头的范围内的每个元素作为第二个参数调用func,
每次调用返回的值都存储在以result开头的范围内。
给定的func将被连续调用last1-first1次。func可以是函数指针或函数对象或lambda表达式。

*/
int main() {
  vector<int> vec1{1, 4, 2, 3, 5};
  vector<int> vec2{1, 2, 3, 4, 5};

  // 将vec1和vec2的每个元素相加,并保存到vec2
  std::transform(vec1.begin(), vec1.end(), vec2.begin(), vec2.begin(),
                 [](int v1, int v2) -> int { return v1 + v2; });

  for (auto ele : vec2) {
    cout << ele << "  ";
  }
  cout << endl;

  return 0; 
}

/* 

std::transform 一元操作 

std::transform(first1, last1, result, func);

对于一元操作,将func应用于[first1,last1)范围内的每个元素,
并将每个操作返回的值存储在以result开头的范围内。
给定的op将被连续调用last1-first1次。func可以是函数指针或函数对象或lambda表达式。

*/

int main1() {
  vector<int> vec1{1, 4, 2, 3, 5};
  vector<int> vec2;

  // 指定vec2的大小
  vec2.resize(vec1.size());  

  // 将vec1的每个元素都增加5,存到vec2
  std::transform(vec1.begin(), vec1.end(), vec2.begin(), value_increase);

  for (auto ele : vec2) {
    cout << ele << "  ";
  }
  cout << endl;

  vector<int> vec3;

  // 指定vec2的大小
  vec3.resize(vec1.size());  

  // 将vec1的每个元素都增加5,存到vec3
  std::transform(vec1.begin(), vec1.end(), vec3.begin(),
                 [](int v) -> int { return v + 10; });

  for (auto ele : vec3) {
    cout << ele << "  ";
  }
  cout << endl;

  return 0;
}

  当需要使用容器拷贝并且按照一定的特征操作数据时,可以使用std::transform。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值