我想将长度为std::vector<size_t>
的{{1}}中的每个元素增加一个,但取决于256
的相同位置(如果等于std::bitset<256>
)。
以下代码可以编辑/编译here。
我的问题是,我可以离开1
循环并进入一些快速逻辑运算符吗?
for
答案 0 :(得分:1)
由于bitset
没有迭代器,我们不能简单地使用std::transform
。但我们可以在size_t
周围创建类似迭代器的包装器,并像index:
#include <iostream>
#include <bitset>
#include <vector>
#include <iterator>
#include <algorithm>
#define SIZE 3
class IntegralIterator
{
public:
IntegralIterator(size_t v = 0) : value(v) {}
size_t operator*()
{
return value;
}
IntegralIterator& operator++()
{
++value;
return *this;
}
private:
size_t value;
};
int main() {
size_t size=SIZE;
std::vector<size_t> v(SIZE); v={3,0,7};
std::bitset<SIZE> b("110");
std::transform(v.begin(), v.end(), IntegralIterator(), v.begin(),
[&](size_t s, size_t index)
{
return s + b[size-1-index];
});
std::copy(v.begin(), v.end(),
std::ostream_iterator<size_t>(std::cout, ",") );
return 0;
}