鏃犲績(jī)鍦ㄨ繖閲宑opy/paste浣嶅浘鎺掑簭鐨勫叿浣撹В閲婏紝濡傛灉鏈夌煡閬撳緱涓嶈緇嗙殑錛岃璁塊棶Wikipedia銆?br />聽(tīng)聽(tīng)1聽(tīng)#ifndef聽(tīng)_BITMAP_HPP_INCLUDED
聽(tīng)聽(tīng)2聽(tīng)#define聽(tīng)_BITMAP_HPP_INCLUDED
聽(tīng)聽(tīng)3聽(tīng)
聽(tīng)聽(tīng)4聽(tīng)#include聽(tīng)<cstring>聽(tīng)//for聽(tīng)memset
聽(tīng)聽(tīng)5聽(tīng)
聽(tīng)聽(tīng)6聽(tīng)
聽(tīng)聽(tīng)7聽(tīng)namespace聽(tīng)feng
聽(tīng)聽(tīng)8聽(tīng){
聽(tīng)聽(tīng)9聽(tīng)
聽(tīng)10聽(tīng)template<typename聽(tīng)Type>
聽(tīng)11聽(tīng)class聽(tīng)Bitmap_Sort
聽(tīng)12聽(tīng){
聽(tīng)13聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)typedef聽(tīng)Type聽(tīng)template_type;
聽(tīng)14聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)private:
聽(tīng)15聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)struct聽(tīng)_Bitmap_Impl;
聽(tīng)16聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)_Bitmap_Impl*聽(tīng)bi_;
聽(tīng)17聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public:
聽(tīng)18聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Bitmap_Sort(聽(tīng)const聽(tīng)template_type&聽(tīng)lower聽(tīng)=聽(tīng)1,聽(tīng)const聽(tīng)template_type&聽(tīng)upper聽(tīng)=聽(tīng)100聽(tīng))
聽(tīng)19聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)20聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bi_聽(tīng)=聽(tīng)lower聽(tīng)<聽(tīng)upper聽(tīng)?
聽(tīng)21聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)new聽(tīng)_Bitmap_Impl(lower,upper)聽(tīng):聽(tīng)
聽(tīng)22聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)new聽(tīng)_Bitmap_Impl(upper,lower);
聽(tīng)23聽(tīng)
聽(tīng)24聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)25聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)~Bitmap_Sort()
聽(tīng)26聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)27聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)delete聽(tīng)bi_;
聽(tīng)28聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)29聽(tīng)
聽(tīng)30聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)void聽(tīng)process(聽(tīng)const聽(tīng)template_type&聽(tīng)v聽(tīng))聽(tīng)const
聽(tīng)31聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)32聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)(*bi_).register_number(聽(tīng)v聽(tīng));
聽(tīng)33聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)34聽(tīng)
聽(tīng)35聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)template<typename聽(tīng)I(yíng)nput_Itor>
聽(tīng)36聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)void聽(tīng)process(聽(tīng)I(yíng)nput_Itor聽(tīng)begin,聽(tīng)I(yíng)nput_Itor聽(tīng)end聽(tīng))聽(tīng)const
聽(tīng)37聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)38聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)while聽(tīng)(聽(tīng)begin聽(tīng)!=聽(tīng)end聽(tīng))
聽(tīng)39聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)(*bi_).register_number(聽(tīng)*begin++聽(tīng));
聽(tīng)40聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//including聽(tīng)<algorithm>聽(tīng)is聽(tīng)not聽(tīng)of聽(tīng)necessity
聽(tīng)41聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//for_each(聽(tīng)begin,聽(tīng)end,聽(tīng)&((*bi_).register_number)聽(tīng));聽(tīng)
聽(tīng)42聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)43聽(tīng)
聽(tīng)44聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)template<typename聽(tīng)Output_Itor>
聽(tīng)45聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Output_Itor聽(tīng)produce(聽(tīng)Output_Itor聽(tīng)begin聽(tīng))聽(tīng)const
聽(tīng)46聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)47聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)for聽(tīng)(聽(tīng)Type聽(tīng)i聽(tīng)=聽(tīng)(*bi_).lower_;聽(tīng)i聽(tīng)<=聽(tīng)(*bi_).upper_;聽(tīng)++i聽(tīng))
聽(tīng)48聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if聽(tīng)(聽(tīng)(*bi_).query_number(i)聽(tīng))
聽(tīng)49聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)*begin++聽(tīng)=聽(tīng)i;
聽(tīng)50聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return聽(tīng)begin;
聽(tīng)51聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)52聽(tīng)};
聽(tīng)53聽(tīng)
聽(tīng)54聽(tīng)
聽(tīng)55聽(tīng)template<typename聽(tīng)Type>
聽(tīng)56聽(tīng)struct聽(tīng)Bitmap_Sort<Type>聽(tīng)::聽(tīng)_Bitmap_Impl聽(tīng)
聽(tīng)57聽(tīng){
聽(tīng)58聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)typedef聽(tīng)unsigned聽(tīng)long聽(tīng)word_type;
聽(tīng)59聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)typedef聽(tīng)Type聽(tīng)template_type;
聽(tīng)60聽(tīng)
聽(tīng)61聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)_Bitmap_Impl(聽(tīng)const聽(tīng)template_type&聽(tīng)lower=1,聽(tīng)const聽(tīng)template_type&聽(tīng)upper=100聽(tīng))
聽(tīng)62聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng):聽(tīng)lower_(lower),upper_(upper)
聽(tīng)63聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)64聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)template_type聽(tīng)length聽(tīng)=聽(tīng)upper聽(tīng)-聽(tīng)lower聽(tīng)+聽(tīng)1;
聽(tīng)65聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)size聽(tīng)=聽(tīng)(length >> bit_shift())聽(tīng)+聽(tīng)1;聽(tīng)
聽(tīng)66聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)67聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buffer_聽(tīng)=聽(tīng)聽(tīng)new聽(tīng)word_type[size];
聽(tīng)68聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)69聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)memset(buffer_,size,0);
聽(tīng)70聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)71聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)~_Bitmap_Impl()
聽(tīng)72聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){聽(tīng)
聽(tīng)73聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)delete聽(tīng)[]聽(tīng)buffer_;聽(tīng)
聽(tīng)74聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)75聽(tīng)
聽(tīng)76聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool聽(tīng)register_number(聽(tīng)const聽(tīng)template_type&聽(tīng)v聽(tīng))聽(tīng)const
聽(tīng)77聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)78聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool聽(tīng)ans聽(tīng)=聽(tīng)false;
聽(tīng)79聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if聽(tīng)(聽(tīng)v聽(tīng)<=聽(tīng)upper_聽(tīng)&&聽(tīng)v聽(tīng)>=聽(tīng)lower_聽(tīng))
聽(tīng)80聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)81聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)template_type聽(tīng)shift聽(tīng)=聽(tīng)v聽(tīng)-聽(tīng)lower_;
聽(tīng)82聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)arr_position聽(tīng)=聽(tīng)shift聽(tīng)>>聽(tīng)bit_shift();
聽(tīng)83聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)relative_position聽(tīng)=聽(tīng)shift聽(tīng)&聽(tīng)(聽(tīng)(1聽(tīng)<<聽(tīng)bit_shift())聽(tīng)-聽(tīng)1聽(tīng));
聽(tīng)84聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)patch聽(tīng)=聽(tīng)1聽(tīng)<<聽(tīng)(聽(tīng)relative_position聽(tīng)+聽(tīng)1聽(tīng));
聽(tīng)85聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buffer_[arr_position]聽(tīng)|=聽(tīng)patch;
聽(tīng)86聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)ans聽(tīng)=聽(tīng)true;
聽(tīng)87聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)88聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return聽(tīng)ans;
聽(tīng)89聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)90聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool聽(tīng)query_number(聽(tīng)const聽(tīng)template_type&聽(tīng)v聽(tīng))聽(tīng)const
聽(tīng)91聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)92聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool聽(tīng)ans聽(tīng)=聽(tīng)false;
聽(tīng)93聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//not聽(tīng)necessory,聽(tīng)commented
聽(tīng)94聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//if聽(tīng)(聽(tīng)v聽(tīng)<=聽(tīng)upper_聽(tīng)&&聽(tīng)v聽(tīng)>=聽(tīng)lower_聽(tīng))
聽(tīng)95聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//{
聽(tīng)96聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)template_type聽(tīng)shift聽(tīng)=聽(tīng)v聽(tīng)-聽(tīng)lower_;
聽(tīng)97聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)arr_position聽(tīng)=聽(tīng)shift聽(tīng)>>聽(tīng)bit_shift();
聽(tīng)98聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)relative_position聽(tīng)=聽(tīng)shift聽(tīng)&聽(tīng)(聽(tīng)(1聽(tīng)<<聽(tīng)bit_shift())聽(tīng)-聽(tīng)1聽(tīng));
聽(tīng)99聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)patch聽(tīng)=聽(tīng)1聽(tīng)<<聽(tīng)(聽(tīng)relative_position聽(tīng)+聽(tīng)1聽(tīng));
100聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(聽(tīng)buffer_[arr_position]聽(tīng)&聽(tīng)patch聽(tīng))
101聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)ans聽(tīng)=聽(tīng)true;
102聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//}
103聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return聽(tīng)ans;
104聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
105聽(tīng)
106聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)const聽(tīng)word_type聽(tīng)bit_shift()聽(tīng)const
107聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
108聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return聽(tīng) 8 == sizeof(unsiged long) ? 6 : 5;
110聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
111聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
112聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)template_type聽(tīng)lower_;
113聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)template_type聽(tīng)upper_;
114聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)mutable聽(tīng)word_type*聽(tīng)buffer_;
115聽(tīng)};
116聽(tīng)
117聽(tīng)
118聽(tīng)}//namespace聽(tīng)feng
119聽(tīng)
120聽(tīng)#endif聽(tīng)//_BITMAP_HPP_INCLUDED
121聽(tīng)
122聽(tīng)
123聽(tīng)
涓涓祴璇曠敤渚嬶細(xì)
#include聽(tīng)<bitmap.hpp>
#include聽(tīng)<iostream>
#include聽(tīng)<iterator>
using聽(tīng)namespace聽(tīng)std;
int聽(tīng)main()
{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)feng::Bitmap_Sort<unsigned聽(tīng)long>聽(tīng)bs(1,聽(tīng)10000000);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)//feng::Bitmap_Sort<unsigned聽(tīng)long>聽(tīng)bs(10000000,聽(tīng)1);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)bs.process((istream_iterator<unsigned聽(tīng)long>(cin)),聽(tīng)(istream_iterator<unsigned聽(tīng)long>()));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)bs.produce(ostream_iterator<unsigned聽(tīng)long>(cout,聽(tīng)"\n"));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)return聽(tīng)0;
}

]]>