为什么std :: vector <bool>不专门按字典顺序比较功能?

时间:2019-06-12 19:15:58

标签: c++ vector

我知道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元素。他们为什么不这样做?

0 个答案:

没有答案