2014-12-04 155 views
2

我快我的代码,除了我需要两个东西帮助下完成的数组。这是我的代码:Code。对于下面的函数,我试图让我可以使用“n”的输入来初始化我的数组myBits,而不是一个常数,它现在是5.初始化具有可变大小的

我的其他问题就在下面。我试图将所有最右边的位切换到“真”。我在“/ * ..... * /”中编写了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

使用'的std ::矢量 myBits(正,假)'返回。 – PaulMcKenzie 2014-12-04 21:49:09

+0

注意,[可变长度数组是没有的部分标准C++](http://stackoverflow.com/q/21273829/1708801)的替代方法是使用[标准::矢量](http://en.cppreference.com/w/cpp/container/vector)或[std :: array](http://en.cppreference.com/w/cpp/container/array)。 – 2014-12-04 21:49:20

+0

为了将r个最右边的位设置为true,我的循环出了什么问题? – 2014-12-04 22:03:01

回答

0

这些被称为可变长度数组(或VLAS的简称)和它们不是标准的特征。C++这是因为我们已经有了数组,可以改变它们的长度他们想怎么过:std::vector用这个来代替数组,它会工作

0

使用std::vector<bool>

std::vector<bool> myBits(n, false);

然后,你必须改变你的while声明:

while (next_permutation(myBits.begin(), myBits.end()));

你也将不得不改变你的printVector功能采取vector<bool>&作为第二个参数(你将不再需要的最后一个参数,n,因为vector知道利用vector::size()功能自己的大小)。

至于你的程序:如果你试图获得每次拍摄的rn的东西相结合,你需要写一个循环初始化最右边r布尔变量来代替true的硬编码的最右边4个条目。

int count = 1; 
for (size_t i = n-1; i >= 0 && count <= r; --i, ++count) 
    myBits[i] = true; 

此外,你应该立即从功能如果r为0

+0

为了将r个最右边的位设置为true,我的循环出了什么问题? – 2014-12-04 22:00:31

+0

如果'n == r'会怎么样?最容易做的事情是循环倒退,从'正1' – PaulMcKenzie 2014-12-04 22:04:45

+0

但在循环,我只能采用B ++开始....没有b--?我该如何倒退? – 2014-12-04 22:11:22