假设我有一个对数变换 vector 乘以常数的函数,因此我定义了一个在给定 vector 和常数的情况下进行映射的函数......
vector<double> logtransform(vector<double> &data, int constant){
vector<double> image;
for (int i = 0; i < data.size(); i++){
image.push_back(constant*log(data[i]));
}
return image;
}
给定一个名为“data”的 vector ,我需要对包含在 double 组中的不同数量的常量应用函数“logtransform”,但是如果函数不是void类型吗?
最佳答案
使用标准库。从 std::transform
开始并让它工作:
std::vector<double> image(data.size()); // allocate all elements!
std::transform(data.begin(), data.end(), image.begin(),
[](double val) { return constant*log(val); });
我认为是对的,但我没有测试过。
一旦你让它工作,就并行它:
std::vector<double> image(data.size()); // allocate all elements!
std::transform(std::execution::par,
data.begin(), data.end(), image.begin(),
[](double val) { return constant*log(val); });
并行化的唯一更改是添加新的第一个参数 std::execution::par
。这需要 C++17。
关于c++ - 是否可以多线程同时执行非void函数? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786999/