bitset(비트셋)은 고정된 길이의 bool 타입 변수를 관리할 수 있는 컨테이너이다. 일반적인 변수가 바이트 단위로 처리되는 데 비해 비트셋은 비트 단위로 처리되기 때문에 속도가 더 빠르다. bitset 클래스는 <bitset> 헤더파일에 정의되어 있으며 이 헤더파일을 인클루드하면 bitset을 사용할 수 있다.
bitset의 각각의 비트는 true(1) 또는 false(0)로 설정될 수 있다.
bitset을 선언하는 방법은 다음과 같다.
bitset<10> b;
<> 안에는 변수가 들어갈 수 없고 상수를 써야 한다. 또한 <> 안에 들어가는 상수의 타입이 부호 없는 정수형인 size_t이기 때문에 실수로 <> 안에 음수를 써도 컴파일 에러가 나지 않는다. 음수를 썼다면 size_t형에서는 매우 큰 양수로 인식되어 그만한 길이의 메모리를 찾지 못해 프로그램에 문제가 생길 수도 있으므로 주의해야 한다.
다음은 bitset의 멤버 함수이다:
b.size(); | b의 길이를 반환한다. |
b.count(); | b에서 true로 설정된 비트의 수를 반환한다. |
b.all(); | b의 모든 비트가 true인지 확인한다. |
b.any(); | b에 true로 설정된 비트가 있는지 확인한다. |
b.none(); | b의 모든 비트가 false인지 확인한다. |
b.test(i); | b의 i번째 비트의 상태를 반환한다. |
b.set(); | b의 모든 비트를 true로 설정한다. |
b.reset(); | b의 모든 비트를 false로 설정한다. |
b.flip(); | b의 모든 비트를 반전한다. |
b.to_string(); | b를 basic_string형으로 변환한 문자열을 반환한다. |
b.to_string(x); | b를 basic_string형으로 변환한 문자열을 반환한다. 0은 문자 x로 변환한다. |
b.to_string(x,y); | b를 basic_string형으로 변환한 문자열을 반환한다. 0은 문자 x로, 1은 문자 y로 변환한다. |
b.to_ulong(); | b를 unsigned long형 정수로 변환한 값을 반환한다. |
b.to_ullong(); | b를 unsigned long long형 정수로 변환한 값을 반환한다. |
bitset::all 함수와 bitset::ullong 함수는 C++11 표준이다.
bitset에는 [], ==, !=, ~, <<, >>, <<=, >>=, &=, ^=, |= 연산자가 오버로딩되어 있다. 단 != 연산자는 C++20에서 삭제되었다. 그밖에 &, ^, | 연산자가 외부 함수로 존재한다. [] 연산자와 bitset::test 함수의 차이점은 범위 체크의 유무이다.
'Algorithm > A. Intro & STL' 카테고리의 다른 글
16. Span (0) | 2021.01.25 |
---|---|
15. Valarray (0) | 2021.01.24 |
13. String (0) | 2021.01.17 |
12. Unordered Container (0) | 2021.01.15 |
11. Map & Multimap (0) | 2021.01.13 |