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

kfm*_*e04 18 c++ algorithm libstdc++ c++11

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

是否有一个C++ 11范式做一个bitwise-AND所有成员之间ab,并把结果std::vector<uint_32> c;

Ker*_* SB 29

一个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; } ); 
Run Code Online (Sandbox Code Playgroud)

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

#include <functional>

std::transform(a.begin(), a.end(), b.begin(),
               std::back_inserter(c), std::bit_and<uint32_t>());
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用`std :: bit_and <uint32_t>`(来自`<functional>`)而不是lambda,这可以更简洁,然后它也适用于C++ 03 :) (11认同)
  • 是.如果矢量的大小不同,则先将较短的矢量放在第一位,否则它将为UB.或者更好的是将两者调整到最大尺寸.与零进行AND运算应该是适当的默认行为.在运行之前还要"保留"结果! (2认同)