c++11 - 在部分副本中使用 for_each

标签 c++11 vector foreach copy mask

我有一些旧的 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/

相关文章:

c++ - 使用 std::move 有任何性能优势吗?

c++ - 在不违反严格别名规则的情况下,在现代 GCC/C++ 中使用网络缓冲区的正确方法

c++ - Win-builds 与 MinGW-builds 之间的区别

c++ - 如何使可变参数模板类方法将函数指针作为从函数模板派生的类型的参数?

c++ - 为什么 C++11 中没有 vector(size_type n, const Allocator& alloc)?

r - 检查 R 向量中的序列

r - 如何将自定义 ggplot 别名存储为 .R 脚本中的 `list` 对象,并沿着所需的标签向量获取它们

java - 流 foreach 具有多个值?

java - 异步小部件 JSP foreach(Java EE 应用程序)

xslt - position()=1 工作正常,但不是 position()<5