all*_*ije 3 c++ nested transform vector range
我在向量<vector <double >>中有数值数据,需要为它们添加标量值,如下所示:
vector <vector<double> > data ( M, vector<double>(N) );
vector <double>scalars(N);
data[0][0] += scalars[0];
data[0][1] += scalars[1];
...
data[0][N-1] += scalars[N-1];
data[1][0] += scalars[0];
data[1][1] += scalars[1];
...
data[1][N-1] += scalars[N-1];
...
data[M-1][N-1] += scalars[N-1];
Run Code Online (Sandbox Code Playgroud)
当然,这可以通过两个for循环来实现.我想知道它是否可以简单地使用transform,bind和plus来完成?我试图尽可能使用仿函数(尽管仍然习惯使用旧的C风格代码).
内部循环需要对数据中的向量0执行此操作:
transform ( data[0].begin(), data[0].end(),
scalars[0].begin(),
data[0].begin(),
plus<double>() )
Run Code Online (Sandbox Code Playgroud)
是否有可能将此行中的数据[0]替换为另一个计数器(与数据[0] ...数据[N-1]的变换相关)?这可能是一个标准问题,但我找不到一个好的参考.
怎么样以下,简单包装一下你transform的for_each?
std::for_each( data.begin(), data.end(),
[&scalars](std::vector<double>& v) {
transform ( v.begin(), v.end(),
scalars.begin(),
v.begin(), plus<double>() );
}
);
Run Code Online (Sandbox Code Playgroud)