C 언어 비트 맵 및 비트 맵 의 실현

2265 단어 C 언어비트 맵
본 논문 의 사례 는 여러분 에 게 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;
}

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기