bool
类型,因为内存不是问题。我计划将代码移动到微控制器中,因此处理能力和内存要求可能成为问题。但现在,我只想要速度。然后我发现了C++ STL中的
std::bitset
对象,但我无法在运行时定义位集的大小。然后我发现std::vector<bool>
具有特殊的初始化程序,以将它们存储为位(而不是整个字节或4个字节),但在维基百科的this section中找到了以下内容:
标准库为
bool
定义了vector
模板的专门化版本。这种专门化版本的描述表明,实现应该打包元素,以便每个bool
只使用一个位的内存。这被广泛认为是一个错误。[...] C++标准委员会和库工作组普遍认为,vector<bool>
应该被弃用,并随后从标准库中删除,而功能将在不同的名称下重新引入。
现在,你可能看到了我使用 vector<bool>
对象的想法,但是在阅读之后,我正在考虑使用其他东西。唯一的问题是我不确定要使用什么。但我很好奇为什么他们说应该重新引入这个功能(尽管使用不同的名称)。
那么,我的问题是,使用vector<bool>
对象是否可行(因为它们是STL的一部分)? 它们是C++标准的一部分吗?
如果它们的使用不可行,则是否有可接受的替代方案(除了我自己定义一个特殊容器)? 我自己有一些想法,但我只是好奇是否有更好的解决方案。 另外,我想避免使用大型库(再次,我希望最终将此代码移植到微控制器上)。
vec[bit>>3] |= (1<<(bit&7));
与std::vector<unsigned char>
有哪些问题? - 6502vector<bool>
- 这是一个有用的数据结构,但名字很糟糕。通过适当的std::find
、std::count
等特化,标准库甚至可以暴露快速的系统特定优化。 - Peter Cordes