文档章节

C++ 不使用vector<bool>的原因和替代方法

吃一堑消化不良
 吃一堑消化不良
发布于 2017/04/17 19:14
字数 352
阅读 102
收藏 0

        vector<bool>的名称有点让人误解,因为其内部元素实际上并不是标准的bool值,C++标准对于vector<bool>值有其特殊的实现方法,目的是为了减小空间的耗用。特殊版本内部只使用一个bit来存储一个元素,所以通常要比一般的bool值小8倍之多。但是这里就带来了一个小麻烦,C++的最小可寻址值通常以byte为单位,所以上述的vector<bool>特殊版本的references和iterators经过了特殊的处理,并不是bool值的实际地址,而是一个“代理对象”。这样,对于一般类可以使用的以下操作:

T* p = &v.front

对于vector<bool>值来说,并不适用。

除此之外,由于vector<bool>通过代理对象进行存取访问时需要执行逐位处理,访问速度通常比int之类的普通类型操作要慢很多。
 因此,对vecotr<bool>的使用需慎重考虑以下几点:
(1)是否需要牺牲速度来获取空间上的优化
(2)算法中会否有对vecotr地址进行解引用操作的可能

        如果不满足以上条件,建议使用deque<bool>或vector<int>来取代vector<bool>,功能基本相同,但deque<bool>未对其进行特殊处理。

本文转载自:http://blog.csdn.net/u013249689/article/details/25297657

吃一堑消化不良
粉丝 28
博文 188
码字总数 112947
作品 0
浦东
程序员
私信 提问
c++回调函数 callback

C++中实现回调机制的几种方式 (1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的...

涩女郎
2015/08/12
0
0
Map以自定义类做为键值

map在STL中的定义 template , class Alloc = alloc> 第一个参数Key是关键字类型 第二个参数T是值类型 第三个参数Compare是比较函数(仿函数) 第四个参数是内存配置对象 map内部存储机制实际...

晨曦之光
2012/04/13
1K
0
最好的朋友:C++11 移动语义和 Pimpl 手法

当编译器可以用廉价的挪动操作替换昂贵的复制操作时,也就是当它可以用一个指向一个大对象的指针的浅层复制来替换对这个大对象的深层复制的时候,挪动语义要比复制语义更快速。因此,在类中利...

乌合之众
2016/06/08
3K
5
cocos2dx 3.1 触摸机制

在cocos2dx 3.0版本中,废弃了以往2.x版本的写法,我们先来看一下Layer.h中的一段代码 [cpp] view plaincopy /* Callback function should not be deprecated, it will generate lots of war......

千山万水
2014/06/30
0
0
Cocos2d-x中Vector容器以及实例介绍

Vector<T> 是Cocos2d-x 3.x推出的列表容器,因此它所能容纳的是Ref及子类所创建的对象指针,其中的T是模板,表示能够放入到容器中的类型,在Cocos2d-x 3.x中T表示Ref类。Vector<T>是模仿C++...

智捷课堂
2014/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何远程调试部署在CloudFoundry平台上的nodejs应用

网络上关于如何本地调试nodejs应用的教程已经很多了,工具有Chrome开发者工具,Visual Studio Code,和nodejs周边的一些小工具等等。 在实际情况中,我们可能遇到本地运行良好,但是部署到C...

JerryWang_SAP
23分钟前
0
0
微信扫码访问网站调用默认浏览器打开如何实现?

我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 “ 已停止访问该网页 ”,无论是聊天框也一样。说是系统检测到您的网...

明尼苏达哈士奇
31分钟前
1
0
一份Java程序员进阶架构师的秘籍,你离架构师还差多远

一、如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并...

我最喜欢三大框架
39分钟前
0
0
想说再见不容易,win7最新市占率依然超36%

微软正在通过努力让Windows 7用户升级至Windows 10,不过从目前的市占率来看,他们还是要加把劲了。 据最新的市场份额看,Windows 10在本月的市场份额有所提升,从43.62%增长到44.10%。另一...

linuxCool
51分钟前
4
0
SQL的优化

对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 对查询进行优化,要尽量避免全表扫描,首先应考虑在进行条件判断的字段上创建了索引。 应尽量避...

咸鱼-李y
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部