我想通過一個以增加其在std::vector<size_t>
與長度256
每個元件,但根據的相同位置的std::bitset<256>
(如果等於1
)。增加元素::矢量<T>根據標準::位集<N>
下面的代碼可以編輯/編譯here。
我的問題是,我可以擺脫for
循環,並得到一些快速的邏輯運算符?
#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',你可以用'b + = a'替換'(a)b + = 1'(因爲'a'爲0或1)。 –
我不這麼認爲,如果你正在處理任意向量長度,在上面編譯器會做一個循環展開操作多個數據一個操作寄存器。 – user1447257
如果循環令人討厭,你總是可以嘗試'std :: transform(v.begin(),v.end(),b.rbegin(),v.begin(),std :: plus())' –
user1447257