位图 模拟
#pragma once
#include <vector>
namespace sjy
{
template <size_t N>
class bitset
{
public:
bitset()
{
_MyVector.resize(N / 32 + 1, 0);
}
void set(size_t x)
{
int i = x / 32;
int j = x % 32;
_MyVector[i] |= (1 << j);
}
void reset(size_t x)
{
int i = x / 32;
int j = x % 32;
_MyVector[i] &= (~(1 << j));
}
bool test(size_t x)
{
int i = x / 32;
int j = x % 32;
return _MyVector[i] & (1 << j);
}
private:
vector<int> _MyVector;
};
template <size_t N>
class twobitset
{
public:
void set(size_t x)
{
if (_bs1.test(x) == false)
{
_bs1.set(x);
}
else if (_bs2.test(x) == false)
{
_bs2.set(x);
}
}
bool is_once(size_t x)
{
return _bs1.test(x) == true && _bs2.test(x) == false;
}
private:
bitset<N> _bs1;
bitset<N> _bs2;
};
}