计算 std::vector<bool> 中的设置值

Soo*_*nts 2 c++ boolean vector visual-c++

是否std::vector<bool>使用POPCNT指令来计算算法的结果std::count

如果不是,是否可以在不复制粘贴完整向量的情况下实现?为此,我需要访问unsigned int实际存储在该向量中的值,这可能吗?

如果重要的话,我只需要 VC++ 2017 解决方案。

Max*_*kin 5

std::countpopcnt不幸的是,不使用std::vector<bool>(至少对于 GNU C++ 标准库)。

std::vector<bool>也不提供对其原始存储的访问,std::vector<bool>::data返回void

另一种解决方案是使用boost::dynamic_bitset<>. boost::dynamic_bitset<>::count使用popcnt指令,请参阅汇编输出

GNU C++ 的std::vector<bool>实现不是最优的,其大小为 40 字节。而 是sizeof(boost::dynamic_bitset<>)32。