我知道std::vector<bool>
是std::vector
类型bool
的节省空间的专业化。我查看了clang和gcc的实现,发现它们长时间使用无符号底层存储类型来一次存储64个bool元素,但是为什么它们不专门使用诸如operator<()
之类的比较函数呢?
您将看到以下代码,他们只是使用std :: lexicographical_compare来比较两个向量,所以效率很低:
template <class Allocator>
bool operator< (const vector<bool, Allocator>& x, const vector<bool,
Allocator>& y)
{
return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}
如果您使用无符号long的基础存储类型来存储64个bool元素,则可以根据基础机器的字节顺序排列位并立即比较64个bool元素。他们为什么不这样做?