我最近不得不写一堆讨厌的std::enable_if
专业来正确处理vector<bool>
本来是一个不错的设计。有some talk删除当前应该从未有过的vector<bool>
,但在此期间我希望有一个正常的vector<bool>
,这是一个真正的标准容器并且内部使用单个布尔数组(std::deque
因此不是一个选项,因为它的存储不能保证是连续的。)
虽然可以将布尔值包装为例如建议的here,但我想知道是否还可以通过提供自定义分配器来修复vector<bool>
?如果是这样,那么如何实现呢?为什么或为什么不将这个解决方案优先于包装布尔值?
答案 0 :(得分:1)
我认为用自定义分配器改变vector<bool>
的行为是不可能的。分配器旨在处理容器的内存分配和释放的所有请求。它们还可以在指定的地址创建或销毁对象,但它们不会影响容器内的对象布局。除了其他内容vector<bool>
并不一定将其数据存储在连续的内存缓冲区中。因此,您拥有的选项是为向量使用另一个容器或其他元素类型(例如char
)
答案 1 :(得分:0)
尝试使用对我有用的boost :: container :: vector