我差不多完成了我的代码,除了我需要两个方面的帮助。这是我的代码:Code。对于下面的功能,我试图使它能够使用" n"的输入。初始化我的数组myBits,而不是一个常量,现在是5.
我的其他问题就在下面。我试图将所有最右边的位切换为" true"。我在" / * ..... * /"中编写了for循环。但它似乎没有起作用。就在它上面,我为C(5,4)做了很长的路....(myBit [0] = myBit [1] ....等......(我用它来找到r-字符串的组合)....它似乎工作。任何帮助将不胜感激!!
void nCombination(const vector<string> &Vect, int n, int r){
bool myBits[5] = { false }; // everything is false now
myBits[1] = myBits[2] = myBits[3] = myBits[4] = true;
/* for(int b = n - r - 1; b = n - 1; b++){
myBits[b] = true; // I am trying to set the r rightmost bits to true
}
*/
do // start combination generator
{
printVector(Vect, myBits, n);
} while (next_permutation(myBits, myBits + n)); // change the bit pattern
}
答案 0 :(得分:0)
这些被称为可变长度数组(或简称为VLA),它们不是标准C ++的功能。这是因为我们已经有了可以根据需要改变长度的数组:std::vector
。使用它代替数组,它将起作用。
答案 1 :(得分:0)
使用std::vector<bool>
:
std::vector<bool> myBits(n, false);
然后你必须改变你的while
声明:
while (next_permutation(myBits.begin(), myBits.end()));
您还必须更改printVector
函数以将vector<bool>&
作为第二个参数(您不会需要最后一个参数n
,因为向量知道利用vector::size()
函数确定自己的大小。
关于您的计划:如果您一次尝试获取n
件事r
的组合,则需要编写一个初始化最后一个r
的循环{{ 1}}加热到true
而不是硬编码最右边的4个条目。
int count = 1;
for (size_t i = n-1; i >= 0 && count <= r; --i, ++count)
myBits[i] = true;
此外,如果r
为0,您应立即从函数返回。