반응형

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

+ Recent posts