我想遍历vect,在每个元素上调用一个函数,在两个结果之间执行一个运算,并将其附加到一个新的向量上。有一个更好的方法吗?
std::vector<int> vect = {{1,2},{3,4}};
std::vector<double> out(vect.size());
for (int i = 0; i < vect.size(); i++){
double v = somefunction(vect[i][0]) - somefunction(vect[i][1]);
out.push_back(v);
}
Run Code Online (Sandbox Code Playgroud)
这就是std::transform可以使用的。
#include <algorithm>
std::vector<double> out(vect.size());
std::transform(vect.cbegin(), vect.cend(), out.begin(), [](const auto& inner)
{ return somefunction(inner.front()) - somefunction(inner.back()); });
Run Code Online (Sandbox Code Playgroud)
假定这vect是一个大小为容器,2具有front()和back()成员函数,它们将执行它们期望的操作。