21

std::vector<uint_32> a, b;假设我有两个我知道大小相同的向量。

是否有 C++11 范式用于在 and 的所有成员之间执行 a并将bitwise-AND结果放入 中?abstd::vector<uint_32> c;

4

3 回答 3

31

一个 lambda 应该可以解决问题:

#include <algorithm>
#include <iterator>

std::transform(a.begin(), a.end(),     // first
               b.begin(),              // second
               std::back_inserter(c),  // output
               [](uint32_t n, uint32_t m) { return n & m; } ); 

更好的是,感谢@Pavel 和完全 C++98:

#include <functional>

std::transform(a.begin(), a.end(), b.begin(),
               std::back_inserter(c), std::bit_and<uint32_t>());
于 2011-12-16T23:17:44.560 回答
1

如果您要在大型数组上经常这样做,请查看https://stackoverflow.com/search?q=valarray中提到的线性代数库。他们中的许多人会利用特殊说明来更快地得到答案。

于 2011-12-17T03:28:30.667 回答
0

只是一个想法,而不是特定于 C++11:也许您可以使用 uint_64 一次遍历 8 个字节的数组,即使实际数组是由 32 位整数组成的?这样您就不会依赖例如 SSE,但仍然可以在许多具有 64 位宽寄存器的 CPU 上快速执行。

于 2014-09-13T08:10:20.557 回答