获取非专用std :: vector <bool>容器的标准方法

时间:2018-03-27 09:57:35

标签: c++ vector c++17

是否有一种标准方式(或者至少是半标准的,在所有流行的编译器中实现)来获得非专业的,非优化的,连续的std::vector<bool>容器?

我有一些处理std::vector的通用代码,它们假设它们都是标准的,连续的容器。我目前的解决方法是使用std::vector<int>只存储0和1,这是我想要的内容,但是拥有正确的矢量类型会更好。

2 个答案:

答案 0 :(得分:7)

作为解决方法,您可能会使用其他类型,请注意char。 否则,您可以在bool周围编写一个包装器,类似于:

struct my_bool
{
    operator bool() const { return b; }
    operator bool&() { return b; }

    bool b;
};

答案 1 :(得分:1)

一般来说,使用std::vector<bool>专业化并不是一种好的做法,当然也不例外。主要是因为它的界面与主std::vector<T>的界面不同,这会造成很多混乱。

这种不规则性在一些在网络上松散的出版物中被提及。最近的一个和恕我直言,很好的阅读是由Howard Hinnant写的On vector<bool>

事实上,前一段时间有人建议将其从标准N1185中移除,但由于向后兼容性问题而被拒绝。

大多数提议的半标准替代方案是使用std::vector<unsigned char>std::vector<char>