は、私は1つによって長256
とstd::vector<size_t>
内の各要素を増やしたいが、同じ位置に応じstd::bitset<256>
(1
等しい場合)。増加要素::ベクトル<T> STDに応じ::ビットセット<N>
下記のコードは編集/編集することができますhere。
私の質問は、for
ループから離れ、いくつかの高速論理演算子を得ることができますか?我々は単にstd::transform
を使用することはできませんので、bitset
#include <iostream>
#include <bitset>
#include <vector>
#include <iterator>
#include <algorithm>
#define SIZE 3
int main() {
size_t size=SIZE;
std::vector<size_t> v(SIZE); v={3,0,7};
std::bitset<SIZE> b("110");
for (size_t i=0; i<size; ++i)
{
if (b[size-1-i]) // reverse
{
++v[i];
}
}
std::copy (v.begin()
, v.end()
, std::ostream_iterator<size_t>(std::cout, ","));
// 3+1,0+1,7+0
// => 4,1,7
return 0;
}
「ベクトル化」のようなものがあります。一度に2ビットを読み取り、値に応じて0または1のSSEベクトルを生成し(テーブルを使用)、ベクトルバッファに直接アクセスして加算します。 'if'が気に入らなければ' if(a)b + = 1'を 'b + = a'(' a'は0または1)なので置き換えることができます。 –
私はそうではありません、任意のベクトル長を処理している場合、上記のコンパイラは、複数のデータの1つの演算レジスタで動作するループアンローリングを行います。 – user1447257
ループが厄介な場合は、いつも 'std :: transform(v.begin()、v.end()、b.rbegin()、v.begin()、std :: plus())' –
user1447257