gpt4 book ai didi

c++ - 在 std::bitset 中找到设置为 true 的最高索引

转载 作者:行者123 更新时间:2023-12-01 14:20:28 25 4
gpt4 key购买 nike

我正在使用 std::bitset<9> deck在我的程序中。默认情况下,它将所有位初始化为 0。

我正在做的代码中的某处:deck.flip(index)哪里index可以是 0-8 中的任意数字(位集索引)。

现在我需要的是找到 last 的索引位设置为 true .

例如:

000100010 - bitset
876543210 - index

在此示例中,设置为 true 的最新位位于索引 5 .这就是我想用 std::bitset 找到的.

我已阅读文档 https://en.cppreference.com/w/cpp/utility/bitset并没有发现任何有用的功能可以做到这一点,作为初学者,我很难弄清楚,我该怎么做?

(对不起,如果问题写得不好,英语是我的第二语言)

最佳答案

似乎唯一的选择是迭代位集并找到最后一个位集,因为位集不支持迭​​代器。

#include <iostream>
#include <bitset>
#include <optional>

template <size_t N>
constexpr std::optional<int> find_last_index_of_bit_set(std::bitset<N> set)
{
for (int i = set.size()-1; i > -1; --i) {
if (set.test(i)) {
return std::optional(i);
}
}
return std::nullopt;
}

int main()
{
std::bitset<10> bitSet("000100010");

auto pos = find_last_index_of_bit_set(bitSet);

if (pos.has_value()) {
std::cout << "Max index is: " << pos.value() << '\n';
} else {
std::cout << "No bit set";
}
}

关于c++ - 在 std::bitset 中找到设置为 true 的最高索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com