0
点赞
收藏
分享

微信扫一扫

编程珠玑-位图


     一个很偶然的机会,读到了编程珠玑这本书,很是折服,本以为自己的水平已经到了某一瓶颈,所要做的只能是等待时间的沉淀,可看到了这本书之后,觉得自己傻得可笑,原来自己从未走进过编程的世界里,呵呵,所以啊,笨鸟要飞了!

      编程珠玑的第一章节就是关于位图,以前从没想过使用这种方式进行数据的排序,可看到了之后分明觉得,编程思想才是IT人的根本所在,好了,闲话不说,此种方法就是使用一个二进制位的集合,进行存储数据,而数据的所在则是位置索引。

     比如0 1 1 1 0  1 0 0 1 0 0 0 0 1 0 0 0 0 0 0,改组数据存储的就是 1 2 3 5  8 13,也就是说1表示的是该数据存在,但是值就是1所在的位置信息

优点:存储数据所需要的内存较少,数据无需移动,即可进行排序

缺点:要进行的数据不能存在重复现象,还有就是数据的大小不能超过二进制位数据结构的最大长度,也就是说,如果二进制位集合是20个,那么要进行排序的数据最大就只能是19

好了,现在开始说下代码吧

///
///文件名称:编程珠玑-位图.cpp
///文件描述:使用位图的表示方法,进行数据的排序
///代码编写:jimmy
///编写时间:2014-03-21
///


#include<iostream>
#include<bitset>
using namespace std;
bitset<20> g_bitset;
int main()
{
int nTemp=0;
int nCount=0;
while((cin>>nTemp)&&(nTemp!=-1))
{
if(nTemp>19||nTemp<0)
{
cout<<"对不起,输入的数字不能超过19,也不能小于0\n";//这里面的19是和bitset<20>中的20相对应的
}
else
{
g_bitset.set(nTemp,1);
}


}
for(int i=0;i<20;i++)
{
if(g_bitset[i]==1)
{
cout<<i<<endl;
}
}
}


///
///文件结束
///



举报

相关推荐

0 条评论