编程珠玑-位图

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

      编程珠玑的第一章节就是关于位图,以前从没想过使用这种方式进行数据的排序,可看到了之后分明觉得,编程思想才是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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值