我们可以使用自定义分配器创建一个普通的向量<bool>吗?</bool>

时间:2014-01-05 10:16:19

标签: c++ vector boolean

我最近不得不写一堆讨厌的std::enable_if专业来正确处理vector<bool>本来是一个不错的设计。有some talk删除当前应该从未有过的vector<bool>,但在此期间我希望有一个正常的vector<bool>,这是一个真正的标准容器并且内部使用单个布尔数组(std::deque因此不是一个选项,因为它的存储不能保证是连续的。)

虽然可以将布尔值包装为例如建议的here,但我想知道是否还可以通过提供自定义分配器来修复vector<bool>?如果是这样,那么如何实现呢?为什么或为什么不将这个解决方案优先于包装布尔值?

2 个答案:

答案 0 :(得分:1)

我认为用自定义分配器改变vector<bool>的行为是不可能的。分配器旨在处理容器的内存分配和释放的所有请求。它们还可以在指定的地址创建或销毁对象,但它们不会影响容器内的对象布局。除了其他内容vector<bool>并不一定将其数据存储在连续的内存缓冲区中。因此,您拥有的选项是为向量使用另一个容器或其他元素类型(例如char

答案 1 :(得分:0)

尝试使用对我有用的boost :: container :: vector