C++STL位标志、智能指针与异常处理
参考《21天学通C++》第25章节,对STL位标志进行介绍。就是当需要不是像char int long 等整个字节数的数据表示形式,而是使用二进制位表示的时候,通常使用这里讲到的位标志。从C++标准模板库的角度讲,实现了两种形式的位标志:bitset类与vector<bool> 模板来较为方便的实现各种各样的位存储与位操作。
一、使用STL位标志
位是存储设置与标志的高效方法。标准模板库提供了可帮助组织与操作位信息的类。
1. bitset类
std::bitset不是STL容器类,因为它不能调整长度,这是一个实用类,针对处理长度在编译阶段已知的位序列进行了优化。需包含#include <bitset>。
2. 实例化bitset
bitset <4> fourBits;
bitset <5> fiveBits ("10101");
bitset <8> eightBitsCopy(eightbits);
可以利用整数来初始化位。
但是得记住:bitset不像vector那样,它的位数在编译阶段指定的,而不是动态调整的,因此指定后就不能插入更多的位。
3. bitset类操作运算符与成员函数
bitset提供了一些很有用的运算符,比如:
<< 将位序列的文本插入到输入流中;
>> 将一个字符插入到bitset对象中;
& 执行按位与;
| 执行按位或;
^ 执行按位异或;
~ 执行按位取反;
>>= 执行按位右移操作;
<<= 执行按位左移操作;
运算符[N] 提供类似数组下标的引用访问方式;
位是可以存储两种状态,对bitset的内容操作,可使用如下的成员函数对bitset中的一位或所有位进行操作:
set 将序列中的所有位进行置位操作;
set(N,val=1) 将N+1位设置为val指定的值,默认为1;
reset 将序列中的所有位进行复位操作;
reset(N)
将N+1位进行复位操作;
flip
将位序列中的所有位取反;
size
返回序列中的位数;
count
返回序列中值为1的位数;
4.
vector <bool>
STL
bitset的缺点之一就是不能动态调整长度;为了克服这种缺点,STL向程序员提供了vector <bool>。
vector
<bool>是对vector的部分具体化,用于存储布尔数据,可用于动态调整长度,因此程序员无需在编译阶段知道要存储的布尔标志数。
除了对于vector<bool>提供了函数flip,用于将序列中的布尔值取反之外,其他操作与vector大部分相同。不再赘述。
5. 总结
bitset是处理位序列和位标志最有效的工具;另外通过vector<bool>能提供动态bool。
************************
2015-8-9
C++STL位标志、智能指针与异常处理的更多相关文章
- 智能指针类模板(上)——STL中的智能指针
智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内 ...
- 转载:STL四种智能指针
转载至:https://blog.csdn.net/K346K346/article/details/81478223 STL一共给我们提供了四种智能指针: auto_ptr.unique_ptr.s ...
- 【STL学习】智能指针之shared_ptr
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择 几乎所有的程序都需要某种形式的引用计数智能指 ...
- STL模板_multimap_智能指针作为键值
map的键值的类型 -可以是自定的类型(对象.函数指针.智能指针....) -但是有副作用-当自己定义的类型键值无法用系统自己提供的 < 或者 > 进行排序的时候,会出现各种问题 -所以需 ...
- STL模板_智能指针概念
一.智能指针1.类类型对象,在其内部封装了一个普通指针.当智能指针对象因离开作用域而被析构时,其析构函数被执行,通过其内部封装的普通指针,销毁该指针的目标对象,避免内存泄露.2.为了表现出和普通指针一 ...
- 【STL学习】智能指针之weak_ptr
简介 weak_ptr是shared_ptr的观察者,它不会干扰shared_ptr所共享对象的所有权,当一个weak_ptr所观察的shared_ptr要释放它的资源时,它会把相关的weak_ptr ...
- STL 智能指针
转自: https://blog.csdn.net/k346k346/article/details/81478223 STL一共给我们提供了四种智能指针:auto_ptr.unique_ptr.sh ...
- C++ | 智能指针初探
智能指针初探 在 c/c++ 语言中有一种特殊的类型--指针类型. 指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量.它可以直接对内存地址中的数据进行操作,是一种非常灵活的变量.指针被誉为 ...
- 论C++的智能指针
一.简介 参考这篇博客,并且根据<C++ Primer>中相关知识,我总结了C++关于智能指针方面的内容. 为了解决内存泄漏的问题,便出现了智能指针.STL提供的智能指针有:aut ...
随机推荐
- Spring boot Bean装配
. Spring boot bean 默认创建的bean 为singleton模式 . @Component 注解 . @Value 为属性初始化 . @Value("${}") ...
- 深度学习面试题25:分离卷积(separable卷积)
目录 举例 单个张量与多个卷积核的分离卷积 参考资料 举例 分离卷积就是先在深度上分别卷积,然后再进行卷积,对应代码为: import tensorflow as tf # [batch, in_he ...
- python 处理geoJson to shp 互转
- JS数组常见方法的深浅拷贝分类
一.涉及浅拷贝类方法,会改变原数组 1,pop(): 删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值.如果数组已经为空,则 pop() 不 改变数组,并返 ...
- SQLServer stuff函数
STUFF ( character_expression , start , length ,character_expression ) 参数 character_expression 一个字符数据 ...
- hive分区表新增字段,已有分区显示为null
如果在hive的分区表新增非分区字段,那么原有的分区的数据即使重新运行也会显示为null. 必须先删除该分区,再重新跑数据.
- ionic4.x网络请求
创建common服务: import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/ ...
- typeScript模块<二>
/*模块 1 模块的的概念 2 模块导出的几种方法 1.export 导出声明 2.export 导出语句 3.export default 4.import导入模块 3 模块化封装上一讲的DB库 * ...
- python制作简单excel统计报表2之操作excel的模块openpyxl简单用法
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
- Spring cloud微服务安全实战-4-11Zuul网关安全开发(四)
限流,有个现成的开源项目可以帮助我们来做网关上的限流 用最新的这个版本 在pom.xml加入引用. 在限流的过程中需要存一些信息,可以存在数据库里 也可以存在redis里.这里我们演示存到数据库里 比 ...