gpt4 book ai didi

c++ - 在C++中初始化一个大小不固定的数组

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:08 25 4
gpt4 key购买 nike

我有一个 C++ 应用程序,我想在其中使用一个在声明时初始化的数组。但是,问题在于项目的数量不是以“正常”方式固定的,而是基于枚举中的“计数器”数字:

//"Normal way"
void myMethod()
{
bool myArray[3] = { false, false, false };
//...
}

//My way
//In .hpp
enum MyEnum
{
Item1,
Item2,
...,

MyEnumCount
}

//In .cpp
void myMethod()
{
bool myArray[MyEnumCount] = { false, false, false };
//...
}

开发时可能发生的一种情况是 MyEnum 定义发生变化,增加或减少其中的项目数。这个想法是,如果发生这种情况,代码将自动适应新的枚举,而无需手动转到特定版本的部分代码。有没有办法在那个数组初始化中做到这一点?或者在这种特定情况下,当 MyEnum 更改时,我必须始终手动更改其初始化?

编辑:感谢到目前为止写的所有回复。我正在编辑我的问题,因为我认为我上面的示例误导了一些用户为实际提出的问题提供答案(实际上,这与我想要的应用程序代码略有不同)。

Restating my question: how does one initialize an array on its declaration with the values he wants when the size of the array is determined by a enum value which may be edited during code development without having to re-write the initialization?

这意味着:

  • 使用 for 循环或任何此类方法的回复都不是有效的,因为我说的是在声明时初始化数组,而不是在代码中进一步。
  • 尽管我的初始代码将我的数组视为static 数组,但这个问题实际上是普遍的,也就是说,与数组是否为static 无关。因此,任何利用数组为 static 的回复都是有效的。当然,不是 static 数组会留下关于为什么不使用 for 循环或类似于初始化的问题,但在那种情况下,答案应该只做一个“switch case”:“如果你有这样的数组,那么这样做的方式就是休闲;如果你有另一种数组,那么这种方式就是另一种方式。
  • 代码示例中自带了一个只有“false”的bool数组,但实际情况是普遍的,即数组可能只填充“true”甚至是“true”和“false”的组合排序通过某种算法甚至可能不是一个 bool 数组,而是一个 int 或 char 或其他什么。
  • 我说的是数组,而不是 vector 或任何 C++ 容器 ;)

由于我进行了此编辑,我会等到明天才能得到完整的答案,如果没有,我会根据您提供的答案做出一个。谢谢!

最佳答案

通过指定一个空的 brace-init 列表很容易做到

void myMethod()
{
static bool myArray[MyEnumCount] = {};
//...
}

在这种情况下,数组的所有元素都将初始化为 false。由于数组是静态的,因此您甚至可以不指定初始化程序。它将由编译器本身进行零初始化。

考虑到您可以使用 std::array:

例如

void myMethod()
{
static array<bool, MyEnumCount> myArray = {};
//...
}

在这种情况下,您可以使用 brace-init 列表重新分配数组。

关于c++ - 在C++中初始化一个大小不固定的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com