我们可以使用<bool>自定义分配器创建法线向量吗?



我最近不得不写一堆讨厌的std::enable_if专业来正确处理vector<bool>,否则这将是一个漂亮而干净的设计。有一些讨论要删除当前不应该vector<bool>,但与此同时,我希望有一个普通的vector<bool>,它是一个实际的标准容器,并且在内部使用单个布尔数组(std::deque因此不是一个选项,因为它的存储不能保证是连续的)。

虽然可以像这里建议的那样包装布尔值,但我想知道是否也可以通过提供自定义分配器来修复vector<bool>?如果是这样,将如何实现这一点?为什么或为什么不首选此解决方案而不是包装布尔值?

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

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

最新更新