首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个容器的元素之间执行成对的二元操作?

如何在两个容器的元素之间执行成对的二元操作?
EN

Stack Overflow用户
提问于 2011-12-17 07:12:54
回答 3查看 1.7K关注 0票数 20

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

是否有一种C++11范例可以在ab的所有成员之间执行bitwise-AND,并将结果放入std::vector<uint_32> c;

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-17 07:17:45

lambda应该可以做到这一点:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#include <functional>

std::transform(a.begin(), a.end(), b.begin(),
               std::back_inserter(c), std::bit_and<uint32_t>());
票数 30
EN

Stack Overflow用户

发布于 2011-12-17 11:28:31

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-13 16:10:21

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8541276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档