【发布时间】:2011-10-10 13:15:31
【问题描述】:
我正在使用用户定义的位数(我持有一个 3 维位数组,因此大小按立方增加 - 假设不少于 512 位),并且需要分别翻转它们。现在,我只是在电脑上使用bool 类型,因为内存不是问题。我确实计划将来将代码移至微控制器,因此处理能力和内存要求可能是一个问题。不过现在,我只想要速度。
然后我从C++ STL 中找到了std::bitset 对象,但我无法在运行时定义位集的大小。然后我发现std::vector<byte> 有一个特殊的初始化程序将它们存储为位(而不是整个字节或 4 个字节),但后来在维基百科中找到了this section:
标准库定义了
vector模板的特化 为bool。该专业的描述表明 实现应该打包元素,以便每个bool只使用 一点的内存。这被广泛认为是一个错误。 [...] C++ 标准委员会和库工作组普遍认为,vector<bool>应该被弃用并随后从标准库中删除,而该功能将以不同的名称重新引入。
现在,您可能会看到我想要使用 vector<bool> 对象,但在阅读之后,我正在考虑使用其他东西。唯一的问题是我不确定要使用 什么。我很好奇为什么他们说应该重新引入功能(尽管名称不同)。
所以,我的问题是,使用 vector<bool> 对象是否可以接受(因为它们是 STL 的一部分)?它们是 C++ 标准的一部分吗?
如果它们的使用不可接受,是否有可接受的替代解决方案(在我之外自己定义一个特殊容器)?我自己有一些想法,但我只是好奇是否有人有更好的解决方案。另外,我想避免使用大型库(同样,我希望最终将此代码移植到微控制器)。
【问题讨论】:
-
仅使用
vec[bit>>3] |= (1<<(bit&7));和std::vector<unsigned char>有什么问题?
标签: c++ stl vector boolean bitset