我有一些旧的 C 代码,但仍然运行得很快。它所做的事情之一是存储数组中满足条件的部分(“屏蔽”副本)
所以C代码是:
int *msk;
int msk_size;
double *ori;
double out[msk_size];
...
for ( int i=0; i<msk_size; i++ )
out[i] = ori[msk[i]];
当我“现代化”这段代码时,我认为有一种方法可以在 C++11 中使用不需要使用索引计数器的迭代器来完成此操作。但似乎没有更短的方法可以使用 std::for_each
甚至 std::copy
来完成此操作。
有没有办法用 C++11 更简洁地写出这个?或者我应该停止寻找并保留旧代码?
最佳答案
我认为您正在寻找std::transfrom
。
std::array<int, msk_size> msk;
std::array<double, msk_size> out;
double *ori;
....
std::transform(std::begin(msk), std::end(msk),
std::begin(out),
[&](int i) { return ori[i]; });
关于c++11 - 在部分副本中使用 for_each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363473/