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

Posted

技术标签:

【中文标题】相当于 Visual Studio 中位集的 .Find_first 方法【英文标题】:equivalent of .Find_first method for bitsets in visual studio 【发布时间】:2012-12-06 20:52:44 【问题描述】:

标题几乎概括了它。

在 gcc 中,您可以在 bitset 上使用.Find_first() 方法来获取第一个有效位的位置。 Visual Studio 中是否有任何等价物?

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

我也对 De Bruijn bit twiddling 方法不感兴趣。

【问题讨论】:

【参考方案1】:
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

就我个人而言,我会建议用一点点玩弄。

【讨论】:

谢谢。这似乎单独检查位的值,这不是我问这个问题时的想法。我主要/主要对一些依赖于编译器的指令感兴趣,例如fbs

以上是关于相当于 Visual Studio 中位集的 .Find_first 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 SSE 中使用位集的实现和性能

使用 Visual Studio 类型数据集的技巧?

Visual Studio 2010“转到定义”/f12 无法正常工作 [重复]

在 Visual Studio 中合并变更集的快捷方式?

无法在 Visual Studio 2017 中更改程序集的默认语言

Visual Studio 解决方案的语义版本控制