位容器

原创 2012年03月25日 00:53:59
#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()
{

}

相关文章推荐

容器液位标尺快速标定

  • 2012年03月04日 11:24
  • 59KB
  • 下载

bit_vector位向量容器

一、原理 bit_vector位向量容器是一个bit位元素的序列容器,具有vector容器一样的成员函数,常用于硬件端口的控制。区别于vector的一个重要特性是bit_vector更节省内存空间,...

bit_vector位向量容器

http://blog.163.com/zhoumhan_0351/blog/static/3995422720103892031806/ bit_vector位向量容器 一、原理 ...

Paas容器实战

  • 2017年11月04日 13:50
  • 76.61MB
  • 下载

vector容器部分源码实现

STL中vector部分源码实现 本次作业要求自己模仿实现STL中vector部分函数为了检测内存的管理机制是否是像源码一样,额外写了一个test类,通过输出来检测是否一样。 test代码如下:#...

tomcat容器

  • 2016年12月15日 15:39
  • 35.12MB
  • 下载

JBoss7和容器轻量化研究报告

  • 2017年06月20日 11:37
  • 4.4MB
  • 下载

Kubernetes1.5新特性:支持windows容器

新特性介绍 在Kubernetes1.5中增加了对windows容器的支持,kubelet和kube-proxy已经可以部署在windows操作系统上,但是API Server, Scheduler,...

C++-中的multiset容器

  • 2016年06月07日 14:18
  • 281KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位容器
举报原因:
原因补充:

(最多只允许输入30个字)