C++ transform

本文通过一个具体的C++程序示例介绍了如何使用STL中的transform函数来实现两个数组之间的数学运算,包括对数组元素进行加一操作以及两个数组对应元素相加的操作。

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

#include <iostream>
#include <algorithm>
#include <array>
#include <vector>
#include <functional>

using namespace std;

int main(){
	
	array<int,8> t1 = {3,5,7,11,13,17,19,23};
	array<int,8> t2;

	//将t1中所有元素加1,并赋给t2
	transform(t1.begin(),t1.end(),t2.begin(),[](int i){return ++i;});
	//此时t2={4,6,8,12,14,18,20,24},t1不变

	//将t1与t2相加并赋给t1
	transform(t1.begin(),t1.end(),t2.begin(),t1.begin(),plus<int>());
	//此时t1={7,11,15...}
	for_each(t1.begin(),t1.end(),[](int i){cout<<i<<endl;});
	return 0;
}



### C++ 中 `std::transform` 函数的用法与示例 在 C++ 标准库中,`std::transform` 是个非常强大的算法,用于将某个操作应用于容器中的每个元素,并将结果存储到另个容器中。它可以用于单个输入范围或两个输入范围的操作[^1]。 #### 单输入范围的 `std::transform` 当仅有个输入范围时,`std::transform` 会将指定的函数应用到该范围的每个元素上,并将结果存储到目标范围中。以下是个简单的示例: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> input = {1, 2, 3, 4, 5}; std::vector<int> output(input.size()); // 使用 std::transform 将每个元素乘以 2 std::transform(input.begin(), input.end(), output.begin(), [](int x) { return x * 2; }); // 输出结果 for (int value : output) { std::cout << value << " "; } return 0; } ``` 上述代码展示了如何使用 `std::transform` 将输入向量中的每个元素乘以 2,并将结果存储到输出向量中。 #### 双输入范围的 `std::transform` 当有两个输入范围时,`std::transform` 会将指定的二元函数应用到两个范围的对应元素上,并将结果存储到目标范围中。以下是个示例: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> input1 = {1, 2, 3, 4, 5}; std::vector<int> input2 = {10, 20, 30, 40, 50}; std::vector<int> output(input1.size()); // 使用 std::transform 将两个向量的对应元素相 std::transform(input1.begin(), input1.end(), input2.begin(), output.begin(), std::plus<int>()); // 输出结果 for (int value : output) { std::cout << value << " "; } return 0; } ``` 在此示例中,`std::transform` 将两个输入向量的对应元素相,并将结果存储到输出向量中[^1]。 #### 在编译时计算的 `std::transform` 结合 C++20 的 `constexpr` 特性,可以在编译时执行 `std::transform` 操作。以下是个示例: ```cpp #include <array> #include <algorithm> constexpr std::array<int, 5> transformAtCompileTime() { std::array<int, 5> input = {1, 2, 3, 4, 5}; std::array<int, 5> output; // 使用 std::transform 在编译时将每个元素乘以 2 std::transform(input.begin(), input.end(), output.begin(), [](int x) { return x * 2; }); return output; } int main() { constexpr auto result = transformAtCompileTime(); for (int value : result) { std::cout << value << " "; } return 0; } ``` 此示例展示了如何在编译时使用 `std::transform` 进行计算[^2]。 ### 注意事项 - `std::transform` 的第个版本接受元函数,而第二个版本接受个二元函数。 - 目标范围必须有足够的空间来存储结果。 - 如果需要在编译时执行 `std::transform`,可以结合 C++20 的 `constexpr` 特性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值