Bre*_*ugh 26 c++ stl boolean vector bitset
我正在使用用户定义的位数(我持有三维位数组,因此大小立方增加 - 假设不小于512位),并且需要单独翻转它们.现在,只是在计算机上,我正在使用该bool类型,因为内存不是问题.我计划将来将代码移到微控制器上,因此处理能力和内存要求可能是一个问题.不过现在,我只想要速度.
然后我std::bitset从C++ STL中找到了该对象,但我无法在运行时定义bitset的大小.然后我发现std::vector<byte>有一个特殊的初始化器将它们存储为位(而不是整个字节,或4个字节),但随后在维基百科中找到了这一部分:
标准库定义了
vector模板的特化bool.此专业化的描述表明实现应该打包元素,以便每个bool只使用 一位内存.这被普遍认为是一个错误.[...] C++标准委员会和图书馆工作组之间存在普遍共识,vector<bool>应该弃用并随后从标准库中删除,而功能将以不同的名称重新引入.
现在,你可能会看到我想要使用一个vector<bool>对象,但在阅读之后,我正在考虑使用其他东西.唯一的问题是我不知道该使用什么.我很好奇为什么他们说应该重新引入功能(尽管名称不同).
所以,我的问题是,vector<bool>对象的使用是否可以接受(因为它们是STL的一部分)?它们是C++标准的一部分吗?
如果他们的使用是不可接受的,是否有一个可接受的替代解决方案(我自己定义一个特殊的容器)?我自己也有一些想法,但我很好奇是否有人有更好的解决方案.另外,我想避免使用大型库(同样,我希望最终将此代码移植到微控制器).
Gna*_*wme 26
在"有效STL"第18项中,Scott Meyers建议:"避免使用vector <bool>.":
作为STL容器,vector <bool>实际上只有两个问题.首先,它不是STL容器.其次,它没有保持沸腾.除此之外,没有太多反对意见.
rub*_*nvb 20
没有任何问题vector<bool>,除了它不等于a vector<T>T是与bool等效的整数类型.这只表现在性能上(CPU一次只访问字节,vector<bool>每个元素存储在一个位中)和内存访问(对a的第一个元素的引用vector<bool>不等同于任何其他元素的数组)vector<T>.
遗憾的是,它是标准的一部分:参见23.3.7(C++ 0x FDIS)部分.
Bo *_*son 12
批评是vector<bool>唯一不完全符合标准容器要求的标准容器.这有点令人惊讶.
另一点是vector<bool>强制对每个人进行空间优化(通过存储位),当某些用户可能更喜欢速度优化时.
除此之外,主要的偏差是容器不能返回对其成员的引用,因为它不存储任何bool.这将使奇数标准库算法无法编译vector<bool>.
如果你可以忍受它,并且它满足你对其他一切的需求,那么使用它是完全可以的.
Cub*_*bbi 11
有boost.dynamic_bitset这是几乎相同的标准:: bitset的,不同之处在于它的大小是在运行时给出.如果你对boost依赖不感兴趣,它的源代码(完全包含在它的头文件中)至少可以提供关于如何编写这样的容器的更多想法.
| 归档时间: |
|
| 查看次数: |
9801 次 |
| 最近记录: |