位容器

原创 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()
{

}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

位容器

#pragma once #include #include using namespace std; class CMyBitVector { public: CMyBitVector(in...

中位数优先容器

要求编写一个容器,它可支持两种操作:push()和pop(),push(K)操作可将元素K放入容器,pop()操作可将容器中的中位值弹出。 例如:push(1),push(2),push(3)后...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

bit_vector位向量容器

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

兼容位图的理解与实例

CreateCompatibleBitmap  函数功能:该函数创建与指定的设备环境相关的设备兼容的位图。   通常情况下,如果是同一类设备,创建的DC的初始化环境是相同的,问题在于设备DC在...

兼容位图

我对兼容位图的理解是:它是为解决绘图统一性而建立的一种机制,和位深无关,你在32位的程序里BITBLT()8位的图不也能行吗?所谓的绘图统一性是这样的。假设在一个界面有多个贴图,如果你不用兼容位图的话...

java容器

java容器

SDRAM的寻址知识及重要的参数

本文来自:我爱研发网(52RD.com) - R&D大本营 详细出处:http://www.52rd.com/Blog/Detail_RD.Blog_hndeng06_11206.html   ...

c++容器之set容器

C/C++ set容器的基本操作 转载自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html ...

STL容器 — 顺序容器

一:顺序容器 三种顺序容器类型:vector、list、deque 三种顺序容器适配器:stack、queue、priority_queue 在顺序容器中添加容器的操作: c.push_back(t)...

vector容器与iterator容器

vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。 vector类为内置数组提供了一...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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