c ++位掩码:代码块的解释

c++ bitmask: explanation of a code block

我是 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 的字符串,并使用 K 个字符 1 实例对其进行初始化(注意,不是 字符 '1').

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

所以如果 'K' 是 2 并且 N5,你最终会得到一个包含不可打印字符的字符串 1 1 0 0 0

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

的情况