终于又来写博客了 ==

bitset存储的是二进数位,就和一个bool性数组差不多。用法上和数组的操作方式也差不多。

每位只占一个字节,大大优化了空间,可以通过数组形式访问。

bitset定义

可以用以下几种方式定义bitset,值得注意的是,bitset在定义的时候必须定义大小,这里8便是我们定义的长度,定义一个空bitset时所有值默认为0;

     bitset<> b;
bitset<> bit();
bitset<> tp1(string(""));
bitset<> tp2(bit); cout << " b = " << b << endl;
cout << "bit = " << bit << endl;
cout << "tp1 = " << tp1 << endl;
cout << "tp2 = " << tp2 << endl;

上面代码的输出结果为

   b =
bit =
tp1 =
tp2 =

bitset的运算

猜都能猜到bitset肯定是支持位运算的,是的bitset可以直接做位运算

     bitset<> tp1(string(""));
bitset<> tp2(string("")); cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl;
cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl;
cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl;
cout << "(~tp1) = " << (~tp1) << endl; cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl;
cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl;
cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl; cout << "(tp1 <<= 1) = " << (tp1 <<= ) << endl;
cout << "(tp1 ^= tp) = " << (tp1 ^= ) << endl; cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl;
cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;

这就没什么好说的了,运行结果为

 (tp1 & tp2) =
(tp1 | tp2) =
(tp1 ^ tp2) =
(~tp1) =
(tp1 &= tp2) =
(tp1 |= tp2) =
(tp1 ^= tp2) =
(tp1 <<= ) =
(tp1 ^= tp) =
(tp1 == tp2) =
(tp1 != tp2) =

bitset的函数

既然也是STL的东西,肯定会封装了一下函数,bitset是没有迭代器的。

常用函数有

     bit.size();        //返回大小(长度)
bit.count(); //返回1的个数
bit.any(); //返回是否有1
bit.none(); //返回是否没有1
bit.set(); //全部置为1
bit.set(p); //将p+1(下标从0开始!!)位置为1
bit.set(p,n); //将p+1位置为n
bit.reset(); //全部置为0
bit.reset(p); //将p+1位置为0
bit.flip(); //全部取反 等同于 (~bit)
bit.flip(p); //将p+1位取反
bit.to_ulong(); //返回转换为 unsigned long 的结果,超范围会报错
bit.to_ullong();//返回转换为 unsigned long long 的结果,超范围报错
bit.to_string();//返回转换为 string 的结果

当题目涉及到位运算时,就可以使用bitset快速的在整形,string,二进制三种类型中完成操作转换。并且可以在某些数据结构中直接套用bitset完成二进制的对位操作。还有就是bitset很好用。完XD

STL的容器基本讲的差不多了。熟练掌握STL好处我也就不多说了= = ,自己在做题的过程中慢慢琢磨熟练吧。

STL中bitset的用法的更多相关文章

  1. STL中mem_fun, mem_fun_ref用法

    1.引言 先看一个STL中for_each的用法: #include <iostream> #include <vector> #include <algorithm&g ...

  2. 位运算 进制转化 STL中bitset用法

    2017-08-17 16:27:29 writer:pprp /* 题目名称:输入十进制以二进制显示 程序说明:同上 作者:pprp 备注:无 日期:2017/8/17 */ #include &l ...

  3. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  4. (转)STL中set的用法

    转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...

  5. STL中的Set用法(详+转)

    set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...

  6. STL中erase()的用法

    erase()是STL提供的容器中比较常用的方法之一,它的功能是删除容器中的某些元素,其中它的函数原型如下: 1.有两个参数,且参数类型都是size_t型: string& erase ( s ...

  7. STL中nth_element的用法

    nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素. 函数用法为:nth_element(first,kth,end). first,last 第一个和 ...

  8. stl中双向队列用法

    双向队列的操作如下: d[i]:返回d中下标为I的元素的引用. d.front():返回的一个元素的引用. d.back():返回最后一个元素的引用. d.pop_back():删除尾部的元素.不返回 ...

  9. STL中set的用法

    set,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序. 头文件:#include<set> 常用的函数: begin()     返回set容 ...

随机推荐

  1. (二十八)c#Winform自定义控件-文本框(一)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  2. 我的第一个CAD程序

    [步骤1]新建项目 启动Visual Studio 2010,然后选择一个C#类库,设置好名称和保存位置,点击[确定] [步骤2]添加引用文件AcMgd.dll和AcDbMgd.dll 首次使用时,[ ...

  3. java读取本机磁盘及遍历磁盘文件

    1. 获取本机所有盘符信息 //1. 获取本机盘符 File[] roots = File.listRoots(); for (int i = 0; i < roots.length; i++) ...

  4. 集合中Iterator迭代器的使用以及实现原理。

    collection集合元素通用的获取方式,在取之前先要判断集合中有没有元素,如果有就把这个元素取出来,继续在判断,如果还有就再取出来,一直把集合中的元素全取出来,这种去出方式叫做迭代. 迭代器的作用 ...

  5. vim 基础配置

    最近在使用 python 搞服务, 简单配置了一个 vim, 配置了自动补全以及背景色 .(ps:搜狗输入法快捷键占用真是太坑爹,改用谷歌输入法,世界安静了) 具体配置如下: 一. 安装插件 1.克隆 ...

  6. 从零写一个编译器(九):语义分析之构造抽象语法树(AST)

    项目的完整代码在 C2j-Compiler 前言 在上一篇完成了符号表的构建,下一步就是输出抽象语法树(Abstract Syntax Tree,AST) 抽象语法树(abstract syntax ...

  7. Sqlserver 游标的写法记录

    ---游标更新删除当前数据 ---1.声明游标 declare orderNum_03_cursor cursor scroll for select OrderId ,userId from big ...

  8. Nacos(二):SpringCloud项目中接入Nacos作为注册中心

    前言 通过上一篇文章:Nacos介绍简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心 上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持 ...

  9. Hive 系列(六)—— Hive 视图和索引

    一.视图 1.1 简介 Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集.视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0 ...

  10. Spring Cloud Stream 核心概念

    Spring Cloud Stream简介 Spring cloud stream是一个构建与Spring Boot和Spring Integration之上的框架,方便开发人员快速构建基于Messa ...