std::vector<uint_32> a, b;同じサイズであることがわかっている 2 つのベクトルがあるとします。
とbitwise-ANDのすべてのメンバー間で実行し、結果を に入れるための C++11 パラダイムはありますか?abstd::vector<uint_32> c;
ラムダはトリックを行う必要があります:
#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固有ではなく、単なるアイデアです。実際の配列は32ビット整数で構成されていても、uint_64を使用して一度に8バイトずつ配列をステップスルーできますか? そうすれば、SSE などに頼らずに、64 ビット幅のレジスタを持つ多くの CPU で高速に実行できます。