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

}

阅读更多
文章标签: null delete
个人分类: 数据结构和算法
想对作者说点什么? 我来说一句

C++中各种容器的用法

2015年01月18日 15KB 下载

cpp求质数_一例

2012年04月11日 7KB 下载

容积计算软件

2014年09月10日 6KB 下载

没有更多推荐了,返回首页

不良信息举报

位容器

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭