c++ - 初始化多维数组中的所有位置?

标签 c++ arrays

我真的不能为此使用 vector ,所以我被一个数组困住了,我很难使用..

string whitelist[256][1];
fill_n(whitelist, sizeof whitelist / sizeof **whitelist, "NULL");

我也尝试过 memset 但它在需要 int 而不是字符串的意义上不起作用,我也尝试过

whitelist[256][1] = {{0}}; 

但是我不相信它有效...我不在乎 0、1 是否已初始化但我需要它来初始化 256...

另外,我需要检查 whitelist[200] 中是否有值,即使它未初始化,我更喜欢这个,但根据我的研究,无法检查它是否为 NULL/空。

最佳答案

通常,对于 T arr[M][N] 类型的数组,您可以执行以下任一操作:

T arr[M][N]{}; // C++11 or later

这将 value-initialize具有默认构造函数的整个二维数组,或者对于 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
}

Live on Coliru

关于c++ - 初始化多维数组中的所有位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330137/

相关文章:

c++ - 使用模板图像匹配具有比例、旋转变化和使用 opencv 的部分遮挡的目标

c - 在 C 中生成有效的数独谜题

javascript - 检查 cookie 值是否在数组中

c++ - 通过引用传递 char 数组

c++ - Visual Studio的C4345警告错了吗?

c++ - N 个区间的 bool 规则 (C)

c++ - 并行调用 std::vector 中的函数

c++ - max_digits10 在引用浮点类型时为 0 有什么好处?

javascript - 我可以对此使用更高的功能吗?

arrays - ruby 比较不同数组中的哈希值