是否有一种标准方式(或者至少是半标准的,在所有流行的编译器中实现)来获得非专业的,非优化的,连续的std::vector<bool>
容器?
我有一些处理std::vector
的通用代码,它们假设它们都是标准的,连续的容器。我目前的解决方法是使用std::vector<int>
只存储0和1,这是我想要的内容,但是拥有正确的矢量类型会更好。
答案 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>
。