根据std :: bitset <n>

时间:2016-07-07 12:35:00

标签: c++ stdvector binary-data std-bitset

我想将长度为std::vector<size_t>的{​​{1}}中的每个元素增加一个,但取决于256的相同位置(如果等于std::bitset<256>)。

以下代码可以编辑/编译here

我的问题是,我可以离开1循环并进入一些快速逻辑运算符吗?

for

1 个答案:

答案 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;
}