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

Initializing An Array with a Variable Size

本文关键字:数组 初始化      更新时间:2023-10-16

我几乎完成了我的代码,除了我需要两件事的帮助。这是我的代码:代码。 对于下面的函数,我正在尝试使用它,以便我可以使用"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
 }
这些

被称为可变长度数组(或简称VLA),它们不是标准C++的特征。 这是因为我们已经有了数组,可以随心所欲地更改它们的长度: std::vector . 使用它而不是数组,它将起作用。

使用 std::vector<bool>

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

然后你必须改变你的while语句:

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

您还必须更改printVector函数以将vector<bool>&作为第二个参数(n,因为向量通过使用vector::size()函数知道自己的大小)。

至于你的程序:如果你试图一次r n东西的组合,你需要编写一个循环,将最后一个右r布尔初始化为true,而不是硬编码最右边的 4 个条目。

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

此外,如果r为 0,则应立即从函数返回。