相当于 .Visual Studio 中位集的Find_first方法
equivalent of .Find_first method for bitsets in visual studio
标题几乎总结了它。
在 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
。
就个人而言,我建议有点扭动。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ find() 在存储为变量时返回不同的值
- set::find 查找不存在的元素
- 使用 std::find 时没有匹配的函数调用错误
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- C++ 字符串迭代器"find first of"
- 应对"Find the first repeated character in a string"挑战的最紧凑、高效、可读和智能的解决方案