C 언어 비트 맵 및 비트 맵 의 실현
1.개념
비트 맵(bitset)은 자주 사용 하 는 데이터 구조 로 넓 은 범위 의 수 를 주 고 그 중의 한 수가 그 안에 있 는 지 아 닌 지 를 판단 하 는 데 자주 사용 된다.색인,데이터 압축 에 있어 서 매우 큰 응용 이 있다.
비트 맵 은 배열 로 이 루어 집 니 다.배열 의 모든 요소 의 바 이 너 리 는 하나의 데 이 터 를 표시 합 니 다.0 은 이 데이터 가 존재 하지 않 음 을 나타 내 고 1 은 이 데이터 가 존재 함 을 나타 냅 니 다.
2.C++라 이브 러 리 에서 bitset 사용
3.bitset 의 간단 한 실현
우리 가 데 이 터 를 저장 할 때의 사고방식 은:
1)데이터 가 어느 구간 에 있 는 지 확인한다.즉bitSet 의 몇 번 째 원소 에서bitset 는 순서 표 입 니 다.모든 요 소 는 char 형식 이 고 value/8 을 얻 을 수 있 습 니 다.
2)데이터 가 어느 구간 의 비트 위치 에 있 는 지 확인 하고 value%8 을(를)얻 을 수 있 습 니 다.
3)이 위 치 를 찾 으 면 bit 위치 1
4)리 셋 할 때 이 bit 위치 0
#pragma once
#include<vector>
// ,
class BitSet
{
public:
BitSet(size_t range)
{
// range 8 , 0 ,
_bitSet.resize(range/8+1,0);
}
void Set(size_t value)
{
size_t index = value / 8; //value>>3
size_t pos = value % 8;
_bitSet[index] |= (1<<pos); // 1: 1
}
void ReSet(size_t value) //
{
size_t index = value / 8;
size_t pos = value % 8;
_bitSet[index] &= ~(1<<pos); // 0: 0
}
bool Test(size_t value) //
{
size_t index = value / 8;
size_t pos = value % 8;
return _bitSet[index] & (1<<pos);
}
protected:
vector<char> _bitSet;
};
void TestBitMap()
{
BitSet b(-1); //-1
b.Set(5);
b.Set(999);
b.Set(1022);
b.Set(111110000);
cout<<b.Test(5)<<endl;
cout<<b.Test(100)<<endl; //100
cout<<b.Test(999)<<endl;
cout<<b.Test(1022)<<endl;
cout<<b.Test(111110000)<<endl;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.