初始化多维数组中的所有位置
initializing all positions in mutlidimensional array?
我不能真正为此使用向量,所以我被困在一个数组上,我很难使用。
string whitelist[256][1];
fill_n(whitelist, sizeof whitelist / sizeof **whitelist, "NULL");
我也尝试过 memset,但它在它想要一个 int 而不是一个字符串的意义上不起作用,我也尝试过
whitelist[256][1] = {{0}};
但是我不相信它奏效了...我不在乎 0、1 是否初始化,但我需要它来启动 256...
或者,我需要检查白名单[200] 中是否有值,即使它未初始化,我更喜欢这个,但根据我的研究,无法检查它是否为 NULL/空。
通常,对于类型 T arr[M][N]
的数组,您可以执行以下任一操作:
T arr[M][N]{}; // C++11 or later
它将使用默认构造函数对整个二维数组进行值初始化,或者,对于 C++98,
T arr[M][N] = {}; // C++98
但是,在您的情况下,类型 std::string
提供默认构造函数,然后定义
string whitelist[256][1];
对每个元素使用该默认构造函数,因此数组中的每个元素都有一个确定值(即空字符串),因此您可以安全地使用它们。这当然与 POD 类型形成鲜明对比,POD 类型的值是不确定的,您需要使用 {}
将它们归零。
请注意,您甚至可以使用类似的东西
string whitelist[256][1] = {"first", "second"};
其余元素将是默认构造的。
说服自己的小例子:
#include <iostream>
struct Foo
{
Foo(int) {std::cout << __PRETTY_FUNCTION__ << std::endl;}
Foo() {std::cout << __PRETTY_FUNCTION__ << std::endl;}
};
int main()
{
Foo arr[2][3] = {1,2}; // calls the int ctor 2 times, default ctor 4 times, as expected
(void)arr; // to remove warning of non-used variable
}
住在科里鲁
包含std::string
元素的数组声明,例如
string whitelist[256][1];
已经使用 std::string
的默认构造函数(创建一个空字符串)自动初始化每个数组元素。无需做任何事情。
你显然相信,如果没有额外的努力,你会以某种方式最终得到"未初始化"的字符串,这在现实中是没有根据的。
相关文章:
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何在数组中交换最小和最大的位置?
- C++ 2D 数组写入多个位置
- C++指针数组到字符数组中的特定位置
- 递增 'int i = 0' 以在初始化的字符数组的位置递增
- 数组中所有元素的最新最小元素的第五个位置
- 关于引用数组位置的问题
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 如何计算 3d 数组中的索引值在内存中的位置?如何计算字符**中的索引值在内存中的位置?
- 如何在 3x4 数组中随机 4 个不同的位置
- C++不同内存位置中的默认数组值
- 使用动态数组访问冲突写入位置
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- C++将可变数量的位置从给定数组传递到函数
- 在不同位置渲染相同精灵的数组
- 有没有办法汇总数组的位位置
- 如何查找数组中所有重复元素的位置
- 在给定的整数数组中,可以找到在给定位置之间分类数组的整数之和
- C++ 在不同位置具有不同数据类型的多维数组