http://blog.naver.com/sorkelf/40135586204
std::bitset의 동적사이즈
사이즈를 런타임시에 결정하는것이 가능하며 비트연산이 가능한 클래스이며
집합의 포함관계를 쓸때 주요한 용도로써 만들어졌다고 한다
std::bitset은 템플릿 매개변수로 비트 길이를 받지만,
boost::dynamic_bitset은 생성자 매개변수로 비트길이를 받는다는 점이 다르다
STL에서는 bitset이나 vector<bool>, valarray<bool>등이 있으나,
std::bitset은 사이즈가 컴파일시 결정하여 값을 고정시킬수 밖에 없으며,
vector<bool>이나 valarray는 사이즈가 가변이긴 하지만
비트집합 전체에 대해서 한번에 비트연산을 실행하는 방법이 불완전하다.
(valarray는 시프트연산 불가)
또한 bitset이던 boost::dynamic_bitset이던 문자열형태로 출력하려면
iostream계열만이 가능하다 (printf() 불가)
bitset의 멤버함수 + is_subset_of와 is_proper_subset_of 라는 함수가 있다
#include <iostream>
#include <boost/dynamic_bitset.hpp>
using namespace std;
int main()
{
// 10비트의 bitset 2개 생성
boost::dynamic_bitset<> a(10);
boost::dynamic_bitset<> b(10);
// 0,3,5번째의 bit를 설정
// 1,3,8,9번째의 bit를 설정
a[0] = a[3] = a[5] = 1;
b[1] = b[3] = b[8] = b[9] = 1;
// 다양한 비트연산 수행
boost::dynamic_bitset<> c = a&b;
boost::dynamic_bitset<> d = a^b;
boost::dynamic_bitset<> e = a<<3;
cout <<"C : " << c << endl;
cout <<"D : " << d << endl;
cout <<"E : " << e << endl;
cout <<"-----------------" <<endl;
//Flip시키기 (반전)
cout <<"D Filp : " << d.flip() <<endl;
cout <<"-----------------" <<endl;
//재반전
d.flip();
// c가 e에 포함되어 있는가?
cout << (c.is_subset_of(e) ? "yes" : "no") << endl;
// c가 d에 포함되어 있는가?
cout << (c.is_proper_subset_of(d) ? "yes" : "no") << endl;
return 0;
}
[출처] boost::dynamic_bitset|작성자 풍풍풍
'메타프로그래밍 > Boost::' 카테고리의 다른 글
boost::intrusive_ptr (0) | 2013.05.13 |
---|---|
boost::pool (0) | 2013.05.11 |
boost::boost::unordered_map, unordered_set (0) | 2013.03.02 |
boost::bind, boost::mem_fn, boost::ref 조합 (0) | 2013.03.01 |
boost::bind & ref, cref (0) | 2013.02.28 |