相当于 .Visual Studio 中位集的Find_first方法

equivalent of .Find_first method for bitsets in visual studio

本文关键字:Find first 方法 Visual Studio 相当于      更新时间:2023-10-16

标题几乎总结了它。

在 gcc 中,您可以在位集上使用 .Find_first() 方法来获取第一个有效位的位置。Visual Studio中是否有类似的内容?

我知道您可以在Visual Studio中使用_BitScanForward64来获取第一个有效位,但是我使用大小大于64的位集,并且此方法仅适用于64位整数。

我也对De Bruijn位叽叽喳喳的方法不感兴趣。

template<size_t N>
size_t highbit( bitset<N> const& bs ) {
  auto str = bs.template to_string< char, char_traits<char>, allocator<char> >();
  size_t retval = 0;
  for(auto it = str.begin(); it != str.end(); ++it, ++retval)
  {
    if (*it == '1')
      return retval;
  }
  return retval;
}

没有一点点摆动,按照要求。 如果位全部为零,则返回N

就个人而言,我建议有点扭动。