位容器

#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()
{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值