21

std::vector<uint_32> a, b;同じサイズであることがわかっている 2 つのベクトルがあるとします。

bitwise-ANDのすべてのメンバー間で実行し、結果を に入れるための C++11 パラダイムはありますか?abstd::vector<uint_32> c;

4

3 に答える 3

31

ラムダはトリックを行う必要があります:

#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-16T23:17:44.560 に答える
1

大規模な配列でこれを頻繁に行う場合は、 https://stackoverflow.com/search?q=valarrayに記載されている線形代数ライブラリを確認してください。それらの多くは、特別な指示を利用して、より速く答えを得るでしょう.

于 2011-12-17T03:28:30.667 に答える
0

C++ 11固有ではなく、単なるアイデアです。実際の配列は32ビット整数で構成されていても、uint_64を使用して一度に8バイトずつ配列をステップスルーできますか? そうすれば、SSE などに頼らずに、64 ビット幅のレジスタを持つ多くの CPU で高速に実行できます。

于 2014-09-13T08:10:20.557 に答える