初始化具有可变大小的数组
Initializing An Array with a Variable Size
我几乎完成了我的代码,除了我需要两件事的帮助。这是我的代码:代码。 对于下面的函数,我正在尝试使用它,以便我可以使用"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,则应立即从函数返回。
相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理