bitset 클래스

Computer/C/C++ 2007. 7. 2. 14:26

뭔가 bitmap을 만들어서 사용할 일이 발생했다.

shift와 modulo 연산을 열라게 하게 될 줄 알고 내심 고민..어떻게 효율적으로 짤 수 있을까 잠시 더 고민...

하다가 STL에 놀라운 녀석이 있다는 사실을 발견하였다.

------------------------------

비트 단위의 조작을 할때 사용할 수 있는 클래스.

가령, 10 비트 공간안에 10개의 값을 저장할 때 사용.

그러나, bitset 클래스가 메모리를 비트 단위로 사용하는 것은 아니고 외부로 표현 될 때 10개의 비트처럼 보인다는 거라넹~~~~


#include <iostream>
#include <bitset>


using namespace std;


int main()
{
    bitset < 5 > flags;


    flags.set ( 0 );
    flags.set ( 1 );
    flags.set ( 2 );


    cout << "상태 : " << flags << endl;

    cout << "any  : " << flags.any( ) << endl;

    cout << "test : " << flags.test(3) << endl;


    flags.reset( 1 );
    cout << "상태 : " << flags << endl;
    cout << "개수 : " << (int)flags.count() << endl;

    return 0;
}


[결과]

상태 : 00111

any  : 1

test  : 0

상태 : 00101

개수 : 2



멤버 함수로는

bitset::any()  - 어떤거라도 켜져 있으면 true 를 return.

bitset::test()  - 몇 번째 비트의 값이 켜져 있는지 꺼져 있는 지 return.

bitset::set()   - 몇 번째 비트의 값을 설정하는 함수.  ( default : 1 )

                      모든 비트를 1로 설정하는 매개 변수 없는 버전 과 특정 비트만 설정하는 매개변수

                      있는 버전이 있다. 매개 변수 있는 버전에서는 두번째가 지정할 값인데 default로

                      1 이기 때문에 인덱스만 지정해서 호출하면 1로 설정이 된다.

                 단, 일반적으로 set()은 설정, reset()은 해제라고 생각하기 때문에 만약 설정값을

                      0 (false) 으로 두면 착각할 수 있다라고 저자는 얘기하고 나 또한 그럴것 같다.

bitset::reset() - 비트를 0으로 설정하는 멤버 함수.

bitset::count() - 켜진 비트 개수를 return. size_t type로 return.


- <프로젝트와 함께 하는 STL의 아름다움> 491page 참조



출처 : http://blog.naver.com/rudalson/100011108867

'Computer > C/C++' 카테고리의 다른 글

#pragma  (0) 2007.08.08
vprintf, vsprintf,... 가변 인수 함수.  (0) 2007.08.01
STL - MAP  (0) 2007.02.27
컨테이너 초기화및 Functor 예제  (0) 2007.02.27
STL lower_bound function 사용하기 Sample...  (0) 2007.02.27