C++ 位掩码:代码块的说明

c++ bitmask: explanation of a code block

本文关键字:说明 代码 掩码 C++      更新时间:2023-10-16

我是 c++ 的新手,我很难理解位掩码。如果有人可以用最简单的方式描述以下代码的工作原理(http://rosettacode.org/wiki/Combinations#C.2B.2B(:

#include <algorithm>
#include <iostream>
#include <string>
void comb(int N, int K)
{
    std::string bitmask(K, 1); // K leading 1's
    bitmask.resize(N, 0); // N-K trailing 0's
    // print integers and permute bitmask
    do {
        for (int i = 0; i < N; ++i) // [0..N-1] integers
        {
            if (bitmask[i]) std::cout << " " << i;
        }
        std::cout << std::endl;
    } while (std::prev_permutation(bitmask.begin(), bitmask.end()));
}
int main()
{
    comb(5, 3);
}

我了解这段代码的目的以及输出是什么,但我不理解字符串位掩码std::string bitmask(K, 1)的初始化,以及resize(N, 0)做什么。

std::string bitmask(K, 1)创建一个名为bitmask的字符串,并使用字符1K实例对其进行初始化(注意,不是字符'1'(。

然后bitmask.resize(N, 0)将字符串的大小调整为大小N,并用字符0填充任何空白(再次注意,不要注意字符'1'(

因此,如果2"K"并且N 5,您最终会得到一个包含不可打印字符的字符串1 1 0 0 0

在我看来,代码存在一些问题 - 首先,构造函数和resize应该'0''1'传递,而不是01。其次,当N低于K时,它不能满足