如何在 C++ 中初始化静态数组
How to initialize a static array in C++
鉴于以下非常基本的功能,我如何将 arr 初始化为所有随机值,以及如何将 arr 初始化为一组给定值,比如数字 0-11?
void func() {
static int arr[2][2][3];
}
以我对静态变量和C++的一般知识有限,我认为静态数组需要在一行中初始化,所以当再次调用该函数时,它不会重新初始化。基本上,我想说:
static int arr[2][2][3] = another_array
但这会引发一个错误,即 'another_array' 不是初始化列表。我查找了初始值设定项列表,但它们都包含 类 和其他我不理解的内容。有没有办法初始化这个数组?感谢任何帮助。
从技术上讲,如果您尝试在单独的行中分配 arr
的值,它在第一次初始化后将永远不会是 re-initialzied。它将是 re-assigned。但根据您的描述,我认为这就是您要防止的行为。
因此要在同一行中初始化 arr
,您可以先创建一个函数来为您生成所需的数字,然后在初始化 arr
期间多次调用该函数:
int gen_num() {
// some code to return a random number for you...
}
void func() {
// I reduced `arr` to a 2D array, to make the code shorter. Making it a 3D array basically works the same
static int arr[2][3] = {{gen_num(), gen_num(), gen_num()}, {gen_num(), gen_num(), gen_num()}};
}
请注意,如果您将 arr
设为 std::array
而不是 C-style 数组,那么您实际上可以在单独的函数中构建一个数组,然后只需 return 该函数的新数组:
std::array<std::array<int, 3>, 2> create_array()
{
std::array<std::array<int, 3>, 2> result;
// here you can assign each value separately
result[0][0] = 20;
result[2][1] = 10;
// or use for loop freely as needed
for(auto& arr : result)
{
for(auto& value : arr)
{
value = get_num();
}
}
return result;
}
void func() {
// Basically the same as having `int arr[2][3]`
static std::array<std::array<int, 3>, 2> arr = create_array();
}
鉴于以下非常基本的功能,我如何将 arr 初始化为所有随机值,以及如何将 arr 初始化为一组给定值,比如数字 0-11?
void func() {
static int arr[2][2][3];
}
以我对静态变量和C++的一般知识有限,我认为静态数组需要在一行中初始化,所以当再次调用该函数时,它不会重新初始化。基本上,我想说:
static int arr[2][2][3] = another_array
但这会引发一个错误,即 'another_array' 不是初始化列表。我查找了初始值设定项列表,但它们都包含 类 和其他我不理解的内容。有没有办法初始化这个数组?感谢任何帮助。
从技术上讲,如果您尝试在单独的行中分配 arr
的值,它在第一次初始化后将永远不会是 re-initialzied。它将是 re-assigned。但根据您的描述,我认为这就是您要防止的行为。
因此要在同一行中初始化 arr
,您可以先创建一个函数来为您生成所需的数字,然后在初始化 arr
期间多次调用该函数:
int gen_num() {
// some code to return a random number for you...
}
void func() {
// I reduced `arr` to a 2D array, to make the code shorter. Making it a 3D array basically works the same
static int arr[2][3] = {{gen_num(), gen_num(), gen_num()}, {gen_num(), gen_num(), gen_num()}};
}
请注意,如果您将 arr
设为 std::array
而不是 C-style 数组,那么您实际上可以在单独的函数中构建一个数组,然后只需 return 该函数的新数组:
std::array<std::array<int, 3>, 2> create_array()
{
std::array<std::array<int, 3>, 2> result;
// here you can assign each value separately
result[0][0] = 20;
result[2][1] = 10;
// or use for loop freely as needed
for(auto& arr : result)
{
for(auto& value : arr)
{
value = get_num();
}
}
return result;
}
void func() {
// Basically the same as having `int arr[2][3]`
static std::array<std::array<int, 3>, 2> arr = create_array();
}