假设我有两个大小相同的向量std::vector<uint_32> a, b;。
是否有一种C++11范例可以在a和b的所有成员之间执行bitwise-AND,并将结果放入std::vector<uint_32> c;中
发布于 2011-12-17 07:17:45
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-17 11:28:31
如果您打算在大型数组上经常这样做,请查看https://stackoverflow.com/search?q=valarray中提到的线性代数库。他们中的许多人会利用特殊的指令来更快地得到答案。
发布于 2014-09-13 16:10:21
这只是一个想法,并不是特定于C++11的:也许您可以使用uint_64一次8个字节遍历数组,即使实际的数组是由32位整数组成的?这样你就不会依赖于SSE,但仍然可以在许多具有64位宽寄存器的CPU上快速执行。
https://stackoverflow.com/questions/8541276
复制相似问题