std::vector<uint_32> a, b;
假设我有两个我知道大小相同的向量。
是否有 C++11 范式用于在 and 的所有成员之间执行 a并将bitwise-AND
结果放入 中?a
b
std::vector<uint_32> c;
一个 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>());
如果您要在大型数组上经常这样做,请查看https://stackoverflow.com/search?q=valarray中提到的线性代数库。他们中的许多人会利用特殊说明来更快地得到答案。
只是一个想法,而不是特定于 C++11:也许您可以使用 uint_64 一次遍历 8 个字节的数组,即使实际数组是由 32 位整数组成的?这样您就不会依赖例如 SSE,但仍然可以在许多具有 64 位宽寄存器的 CPU 上快速执行。