c++ algorithm
cheatsheet:https://hackingcpp.com
transform
元素变换
https://blog.csdn.net/qq_44961737/article/details/146011174
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> a = {1, 2, 3, 4, 5};std::vector<int> b = {10, 20, 30, 40, 50};std::vector<int> result(a.size());std::transform(a.begin(), a.end(), b.begin(), result.begin(),[](int x, int y) { return x + y; });for (int x : result) std::cout << x << " ";// 输出: 11 22 33 44 55return 0;
}
reduce
并行求和
和accumulate区别: https://blog.csdn.net/2401_88063487/article/details/146892173
#include <algorithm>
#include <execution>
#include <iostream>
#include <vector>
using namespace std;int main()
{std::vector<int> src{ 1,2,3,4,5,6,7,8 };int sum1 = std::reduce(std::execution::par, src.begin(), src.end());cout << "sum1: " << sum1 << endl;return 0;
}
transform_reduce
https://blog.csdn.net/www_dong/article/details/132636826
可以理解为transform+reduce,先变换再相加,返回一个数
#include <algorithm>
#include <execution>
#include <iostream>
#include <vector>
using namespace std;int main()
{std::vector<int> src{ 1,2,3,4,5,6,7,8 };int sum = std::transform_reduce(std::execution::par,src.begin(), src.end(), 0,std::plus<int>{}, [](int x) {return x * 2;});cout << "sum: " << sum << endl; // 输出 sum: 72return 0;
}
inclusive_scan
计算前缀运算结果
默认加法
使用乘法运算函数对象std::multiplies,计算元素累乘
其他仿函数
https://www.cnblogs.com/cyssmile/p/12790854.html
less greater greater_equal less_equal not_equal_to
logical_and logical_or logical_not
minus plus divide modulus negate
自定义函数
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::transformint doubleValue(int elem) {return elem * 2;
}int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};std::vector<int> result(numbers.size());std::transform(numbers.begin(), numbers.end(), result.begin(), doubleValue);return 0;
}