#pragma once
#include <iostream>
#include <Windows.h>
using namespace std;
class CMyBitVector
{
public:
CMyBitVector(int iSize);
~CMyBitVector();
BOOL Resize(int iSize);
BOOL SetBit(int iIndex);
BOOL ClearBit(int iIndex);
void ClearAll();
void SetAll();
void Show();
BOOL operator[](int iIndex);
private:
unsigned long* m_pArray;
int m_iSize;
};
CMyBitVector::CMyBitVector(int iSize)
{
m_iSize=0;
m_pArray=NULL;
Resize(iSize);
}
CMyBitVector::~CMyBitVector()
{
if (NULL!=m_pArray)
{
delete[] m_pArray;
m_pArray=NULL;
}
m_iSize=0;
}
BOOL CMyBitVector::Resize(int iSize)
{
int iRealSize=0;
if (0==iSize % sizeof(int))
{
iRealSize=iSize/sizeof(int);
}
else
{
iRealSize=iSize/sizeof(int)+1;
}
unsigned long* mNewArray=new unsigned long[iRealSize];
ZeroMemory(mNewArray,iRealSize*sizeof(unsigned long));
int iMinSize=0;
if (iRealSize<m_iSize)
{
iMinSize=iRealSize;
}
else
iMinSize=m_iSize;
for (int index=0;index<iMinSize;index++)
{
mNewArray[index]=m_pArray[index];
}
m_iSize=iRealSize;
if (NULL!=m_pArray)
{
delete[] m_pArray;
m_pArray=NULL;
}
m_pArray=mNewArray;
return TRUE;
}
BOOL CMyBitVector::operator [](int iIndex)
{
if (iIndex<0 || iIndex>=m_iSize*sizeof(unsigned long))
{
return FALSE;
}
int index=iIndex/(sizeof(int)*8);
int bitindex=iIndex % (sizeof(int)*8);
return (m_pArray[index] & 1 << bitindex) >> bitindex;
}
BOOL CMyBitVector::SetBit(int iIndex)
{
if (iIndex<0 || iIndex>=m_iSize*sizeof(unsigned long))
{
return FALSE;
}
int index=iIndex/(sizeof(int)*8);
int bitindex=iIndex % (sizeof(int)*8);
m_pArray[index]=m_pArray[index] | (1 << bitindex);
return TRUE;
}
BOOL CMyBitVector::ClearBit(int iIndex)
{
if (iIndex<0 || iIndex>=m_iSize*sizeof(unsigned long))
{
return FALSE;
}
int index=iIndex/(sizeof(int)*8);
int bitindex=iIndex % (sizeof(int)*8);
m_pArray[index]=m_pArray[index] & (~(1 << bitindex));
return TRUE;
}
void CMyBitVector::ClearAll()
{
for (int index=0;index<m_iSize;index++)
{
m_pArray[index]=0;
}
}
void CMyBitVector::SetAll()
{
for (int index=0;index<m_iSize;index++)
{
m_pArray[index]=0xFFFFFFFF;
}
}
void CMyBitVector::Show()
{
}
位容器
最新推荐文章于 2022-12-29 20:26:30 发布