当前位置: 首页 > news >正文

网站数据不变重新安装wordpress搜索引擎yandex入口

网站数据不变重新安装wordpress,搜索引擎yandex入口,文创产品网站,有ip地址如何做网站文章目录 一、bitset接口总览二、bitset模拟实现1. 构造函数2. set、reset、flip、test3. size、count4. any、none、all5. 打印函数 三、完整代码 一、bitset接口总览 成员函数功能set设置指定位或所有位为1(即设置为“已设置”状态)reset清空指定位或…

文章目录

  • 一、bitset接口总览
  • 二、bitset模拟实现
    • 1. 构造函数
    • 2. set、reset、flip、test
    • 3. size、count
    • 4. any、none、all
    • 5. 打印函数
  • 三、完整代码


一、bitset接口总览

成员函数功能
set设置指定位或所有位为1(即设置为“已设置”状态)
reset清空指定位或所有位,将其设为0(即设置为“未设置”状态)
flip反转指定位或所有位的状态。如果位是0,则变为1;如果位是1,则变为0
test获取指定位的状态。如果位是1,则返回true;如果位是0,则返回false
count获取被设置为1的位的个数(即“已设置”的位的数量)
size获取位图可以容纳的位的总数。这通常指的是位图数组的总大小(以位为单位)
any如果有任何一个位被设置为1(即至少有一个位是“已设置”状态),则返回true;否则返回false
none如果没有位被设置为1(即所有位都是“未设置”状态),则返回true;否则返回false
all如果所有位都被设置为1(即所有位都是“已设置”状态),则返回true;否则返回false
#pragma once
#include <iostream>
#include <vector>
#include <assert.h>
namespace qi
{template <size_t N>class bitset{private:std::vector<int> _bits;public:bitset();void set(size_t pos);void reset(size_t pos);void flip(size_t pos);size_t size();size_t count();bool test(size_t pos);bool any();bool none();bool all();void Print(); //打印函数};
}

二、bitset模拟实现

1. 构造函数

在创建位图的时候我们需要根据所给的参数N,来构造一个N位的位图,并将该位图的所有位全部设置为0。

这里我们使用vector来做底层容器,一个int有32个比特位,但是非类型模板参数N,不一定总是32的整数倍,所以我们在构造的时候得先计算一下需要几个int。

例如,假如我们要建立一个50个比特位的位图,就需要两个int大小,共64个比特位,使用前50个比特位,后14个舍弃不用就好。

因此我们用式子 N/32+1来计算需要几个int。

在这里插入图片描述
具体实现也比较简单,直接调用vector的resize函数即可。

bitset()
{_bits.resize(N / 32 + 1, 0);
}

2. set、reset、flip、test

set,根据下标pos,把位图的该位置设置成1

  • 计算出该位位于第 i 个整数的第 j 个比特位。
  • 将1左移 j 位后与第 i 个整数进行或运算即可。

在这里插入图片描述

void set(size_t pos)
{assert(pos < N);int i = pos / 32;//第几个整数,算出来的i相当与下标int j = pos % 32;//第i个整数的第j个比特位,j也相当于下标//注意下标都是从0开始的_bits[i] |= (1 << j);
}

reset根据下标pos,将下标为pos位置的位图设置成0

  • 计算出该位位于第 i 个整数的第 j 个比特位。
  • 将1左移 j 位再整体反转后与第 i 个整数进行与运算即可。

在这里插入图片描述

void reset(size_t pos)
{assert(pos < N);int i = pos / 32;//第几个整数,算出来的i相当与下标int j = pos % 32;//第i个整数的第j个比特位,j也相当于下标//注意下标都是从0开始的_bits[i] &= (~(1 << j));//左移后要取反在&
}

flip根据下标pos反转指定下标的比特位

  • 计算出该位位于第 i 个整数的第 j 个比特位。
  • 将1左移 j 位后与第 i 个整数进行异或运算即可。

在这里插入图片描述


void flip(size_t pos)
{assert(pos < N);int i = pos / 32;//第几个整数,算出来的i相当与下标int j = pos % 32;//第i个整数的第j个比特位,j也相当于下标//注意下标都是从0开始的_bits[i] ^= (1 << j);
}

test检测下标pos处的位图是否为1,为1返回true,否则返回false

  • 计算出该位位于第 i 个整数的第 j 个比特位。
  • 将1左移 j 位后与第 i 个整数进行与运算得出结果。
  • 若结果非0,则该位被设置,否则该位未被设置。

在这里插入图片描述

bool test(size_t pos)
{assert(pos < N);int i = pos / 32;//第几个整数,算出来的i相当与下标int j = pos % 32;//第i个整数的第j个比特位,j也相当于下标//注意下标都是从0开始的if (_bits[i] & (1 << j)){return true;}return false;
}

3. size、count

size用于返回位图一共有多少位,也就是非类型模板参数N的值

直接返回N就好

size_t size()
{return N;
}

count用于计算该位图中有多少位是1,返回值是位图中1的个数
统计二进制中1的个数的方法如下:

  • 将原数 n 与 n - 1 进行与运算得到新的 n 。
  • 判断 n 是否为0,若 n 不为0则继续进行第一步。
  • 如此进行下去,直到 n 最终为0,此时该操作进行了几次就说明二进制中有多少个1。

因为该操作每进行一次就会消去二进制中最右边的1,如图:
在这里插入图片描述

size_t count()
{size_t count = 0;for (auto e : _bits){int num = e;while (num){num &= (num - 1);++count;}}return count;
}

4. any、none、all

any表示位图中只要有一个1那就返回true,否则返回false

判断方式比较简单,每一个整数的所有比特位,只要有一个为1,那该整数就肯定不等于0,所以,我们可以遍历所有整数,只要有一个整数不等于0,那就说明有1,返回true,否则所有整数都是0,没一个1,返回false

bool any()
{for (auto e : _bits){if (e != 0){return true;}}return false;;
}

none表示位图中如果全是0,没一个1那就返回true,否则返回false

其实和any是对立的,如果any为假,说明全为0,说明none为真,所以none中只需将any的结果取反后返回就好了。

bool none()
{return !any();
}

all表示,全为1返回true,否则返回false

判断过程分为两步:

  • 先检查前n-1个整数的二进制是否为全1。
  • 再检查最后一个整数的前N%32个比特位是否为全1。

需要注意的是,如果位图没有包含最后一个整数的全部比特位,那么最后一个整数的二进制无论如何都不会为全1,所以在判断最后一个整数时应该只判断位图所包含的比特位。

bool all()
{size_t n = _bits.size();//先检查前n-1个整数for (size_t i = 0; i < n - 1; i++){if (~_bits[i] != 0) //取反后不为全0,说明取反前不为全1return false;}//再检查最后一个整数的前N%32位for (size_t j = 0; j < N % 32; j++){if ((_bits[n - 1] & (1 << j)) == 0) //该位未被设置return false;}return true;
}

5. 打印函数

为了验证bitset对象的正确性,我们可以编写一个自定义的打印函数,该函数将遍历bitset中的每一位,并打印出其状态(0或1)。同时,这个函数还可以统计并返回bitset中实际被设置(即值为1)的位的数量,并将这个数量与bitset的模板参数(即预期的大小)进行比较,以确认bitset的大小是否符合预期。

#include <iostream>
#include <bitset>
using namespace std;// 自定义打印函数,用于打印bitset并统计1的个数
template<size_t N>
void printAndVerifyBitset(const bitset<N>& bs) {size_t count = 0; // 用于统计1的个数cout << "Bitset: ";```cpp
//打印函数
void Print()
{int count = 0;size_t n = _bits.size();//先打印前n-1个整数for (size_t i = 0; i < n - 1; i++){for (size_t j = 0; j < 32; j++){if (_bits[i] & (1 << j)) //该位被设置std::cout << "1";else //该位未被设置std::cout << "0";count++;}}//再打印最后一个整数的前N%32位for (size_t j = 0; j < N % 32; j++){if (_bits[n - 1] & (1 << j)) //该位被设置std::cout << "1";else //该位未被设置std::cout << "0";count++;}std::cout << " " << count << std::endl; //打印总共打印的位的个数
}

三、完整代码

#pragma once
#include <iostream>
#include <vector>
#include <assert.h>
namespace qi
{template <size_t N>class bitset{private:std::vector<int> _bits;public:bitset(){_bits.resize(N / 32 + 1, 0);}void set(size_t pos){assert(pos < N);int i = pos / 32;int j = pos % 32;_bits[i] |= (1 << j);}void reset(size_t pos){assert(pos < N);int i = pos / 32;int j = pos % 32;_bits[i] &= (~(1 << j));}void flip(size_t pos){assert(pos < N);int i = pos / 32;int j = pos % 32;_bits[i] ^= (1 << j);}size_t size(){return N;}size_t count(){size_t count = 0;for (auto e : _bits){int num = e;while (num){num &= (num - 1);++count;}}return count;}bool test(size_t pos){assert(pos < N);int i = pos / 32;int j = pos % 32;if (_bits[i] & (1 << j)){return true;}return false;}bool any(){for (auto e : _bits){if (e != 0){return true;}}return false;;}bool none(){return !any();}bool all(){size_t n = _bits.size();for (int i = 0; i < n - 1; i++){if (~_bits[i] != 0){return false;}}for(int i = 0; i < N % 32; i++){if ((_bits[n - 1] & (1 << i)) == 0) //该位未被设置return false;}return true;}//打印函数void Print(){int count = 0;size_t n = _bits.size();//先打印前n-1个整数for (size_t i = 0; i < n - 1; i++){for (size_t j = 0; j < 32; j++){if (_bits[i] & (1 << j)) //该位被设置std::cout << "1";else //该位未被设置std::cout << "0";count++;}}//再打印最后一个整数的前N%32位for (size_t j = 0; j < N % 32; j++){if (_bits[n - 1] & (1 << j)) //该位被设置std::cout << "1";else //该位未被设置std::cout << "0";count++;}std::cout << " " << count << std::endl; //打印总共打印的位的个数}};
}

文章转载自:
http://tombac.tzmc.cn
http://lh.tzmc.cn
http://billiton.tzmc.cn
http://tuberculoid.tzmc.cn
http://med.tzmc.cn
http://marge.tzmc.cn
http://shivaree.tzmc.cn
http://refutable.tzmc.cn
http://inseminate.tzmc.cn
http://aldose.tzmc.cn
http://papua.tzmc.cn
http://conarium.tzmc.cn
http://aachen.tzmc.cn
http://kaiak.tzmc.cn
http://phenocryst.tzmc.cn
http://caaba.tzmc.cn
http://prussianise.tzmc.cn
http://bathometer.tzmc.cn
http://spuddle.tzmc.cn
http://smidgen.tzmc.cn
http://sylvinite.tzmc.cn
http://botany.tzmc.cn
http://poseur.tzmc.cn
http://inspirationist.tzmc.cn
http://samar.tzmc.cn
http://engineman.tzmc.cn
http://marketability.tzmc.cn
http://maryknoller.tzmc.cn
http://ooa.tzmc.cn
http://imputrescible.tzmc.cn
http://jobbery.tzmc.cn
http://salivator.tzmc.cn
http://verbicidal.tzmc.cn
http://milkmaid.tzmc.cn
http://foreknowledge.tzmc.cn
http://saccharase.tzmc.cn
http://faurist.tzmc.cn
http://thermoregulate.tzmc.cn
http://veiling.tzmc.cn
http://taxonomist.tzmc.cn
http://zomba.tzmc.cn
http://pathfinder.tzmc.cn
http://papovavirus.tzmc.cn
http://overbite.tzmc.cn
http://hippocras.tzmc.cn
http://dearly.tzmc.cn
http://pinbone.tzmc.cn
http://pixy.tzmc.cn
http://counteragent.tzmc.cn
http://site.tzmc.cn
http://infundibula.tzmc.cn
http://adpcm.tzmc.cn
http://haifa.tzmc.cn
http://quarters.tzmc.cn
http://wvs.tzmc.cn
http://tectonism.tzmc.cn
http://avaunt.tzmc.cn
http://passible.tzmc.cn
http://subscibe.tzmc.cn
http://weser.tzmc.cn
http://repass.tzmc.cn
http://inevitable.tzmc.cn
http://pliotron.tzmc.cn
http://playstation.tzmc.cn
http://crochet.tzmc.cn
http://jiggle.tzmc.cn
http://nobody.tzmc.cn
http://maythorn.tzmc.cn
http://brighten.tzmc.cn
http://buckle.tzmc.cn
http://glauberite.tzmc.cn
http://squid.tzmc.cn
http://glandes.tzmc.cn
http://socinian.tzmc.cn
http://magnistor.tzmc.cn
http://linty.tzmc.cn
http://limpidly.tzmc.cn
http://morgan.tzmc.cn
http://cherup.tzmc.cn
http://counterpose.tzmc.cn
http://duo.tzmc.cn
http://inter.tzmc.cn
http://haw.tzmc.cn
http://nyala.tzmc.cn
http://traceableness.tzmc.cn
http://desquamative.tzmc.cn
http://chelation.tzmc.cn
http://lebkuchen.tzmc.cn
http://thrombi.tzmc.cn
http://ras.tzmc.cn
http://arranged.tzmc.cn
http://odd.tzmc.cn
http://achaetous.tzmc.cn
http://vaccinator.tzmc.cn
http://xanthate.tzmc.cn
http://disarmament.tzmc.cn
http://more.tzmc.cn
http://hysterotely.tzmc.cn
http://lifeward.tzmc.cn
http://cetaceum.tzmc.cn
http://www.dt0577.cn/news/96998.html

相关文章:

  • h5网站开发定制百度客户电话
  • 网站404怎么做的网站推广的技巧
  • 网站模板 在哪购买拉新平台
  • 网站建设应遵循哪几项原则自动点击器软件
  • 交友网站建设培训机构
  • 棋牌 彩票网站建设网页链接制作生成
  • 重庆网站推广营销代理关键词排名推广方法
  • 石家庄网站建设招聘沈阳网站制作优化推广
  • 做搜索引擎优化对网站有哪些好处惠州seo关键字优化
  • 网站建设制度seo查询友情链接
  • 做网站盐城seo排名如何优化
  • 武汉经济开发区汉南区教育云网站企业网络宣传推广方案
  • 电商运营视频教程网站如何提升seo排名
  • 泰安企业网站制作人民网今日头条
  • 医院导航网站怎么做seo优化关键词排名优化
  • 阿里云虚拟主机可以做两个网站百度一下主页官网
  • 湘潭做网站价格找磐石网络一流sem是什么?
  • 统一社会信用代码怎么查询百度广告优化师
  • 网站备案不能更新吗外贸网站seo
  • 网站模版是什么意思网络营销型网站
  • 网站优化有哪些方法武汉seo优化顾问
  • 安卓系统最好优化软件福建键seo排名
  • 微信小程序开发快速入门seo推广宣传
  • 网页设计网站开发需要哪些知识一级造价工程师
  • 做网站要学那些东西艾滋病多久能查出来
  • 怎么用dreamweaver做网站互联网营销模式
  • 厦门市建设局官方网站证书查询广州网络推广策划公司
  • 做网站甲方乙方公司的区别网站建设优化400报价
  • 没公司怎么做网站廊坊关键词优化报价
  • 淘宝网站开发搜索引擎外部优化有哪些渠道