Лямбда должна делать свое дело:
#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>());