初始化具有可变大小的数组

时间:2014-12-04 21:44:15

标签: c++ arrays initialization

我差不多完成了我的代码,除了我需要两个方面的帮助。这是我的代码: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
 }

2 个答案:

答案 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,您应立即从函数返回。