终于又来写博客了 ==

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. 【openmp】for循环的break问题

    问题描述:在用openmp并行化处理for循环的时候,便无法在for循环中用break语句,那么我们如何实现这样的机制呢?在stackoverflow上看到一个不错的回答总结一下. volatile ...

  2. Kaggle比赛(一)Titanic: Machine Learning from Disaster

    泰坦尼克号幸存预测是本小白接触的第一个Kaggle入门比赛,主要参考了以下两篇教程: https://www.cnblogs.com/star-zhao/p/9801196.html https:// ...

  3. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析

    帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析 一.漏洞描述 该漏洞是由于javascript获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输 ...

  4. pip安装时使用国内源,加快下载速度

    国内源: 新版ubuntu要求使用https源,要注意. 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.c ...

  5. npm install 安装很慢

    npm install 安装很慢 设置国内镜像 npm config set registry https://registry.npm.taobao.org npm install

  6. 从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译

    一.缘起 前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权. 过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC- ...

  7. Spring框架完全掌握(下)

    接着上一篇文章的内容Spring框架完全掌握(上),我们继续深入了解Spring框架. Spring_AOP 考虑到AOP在Spring中是非常重要的,很有必要拿出来单独说一说.所以本篇文章基本上讲述 ...

  8. Python-demo(video)

    #!/usr/bin/env python# #-*-coding:utf-8-*-import requestsimport randomimport timedef get_json(url): ...

  9. MYSQL批量导入数据报:[Err] 2006 - MySQL server has gone away 解决方法

    使用values 后接批量数据插入,因mysql 系统参数设置导致失败(数据量过大).可通过临时修改系统参数来解决,对系统安全性无影响: set global max_allowed_packet=1 ...

  10. 实战redhat6.5离线升级openssl&openssh

    记录一次RedHat6.5升级openssl&openssh踩坑填坑.由于机房信息安全员用绿盟扫描出服务器openssh有8个重要的安全漏洞,最好的解决方式就是升级版本. 注意事项: 先升级o ...