我实际上不能使用矢量,所以我遇到了一个难以使用的数组...
string whitelist[256][1];
fill_n(whitelist, sizeof whitelist / sizeof **whitelist, "NULL");
我也尝试了memset,但是它不起作用,它想要一个int而不是一个字符串,我也试过
whitelist[256][1] = {{0}};
然而我不相信它有用......我不在乎0,1是否被初始化但是我需要它来初始化256 ...
另外,我需要检查白名单[200]中是否有值,即使它未初始化,我更喜欢这个,但是从我的研究来看,无法检查它是否为空/空。
答案 0 :(得分:3)
通常,对于T arr[M][N]
类型的数组,您可以执行以下任一操作:
T arr[M][N]{}; // C++11 or later
将value-initialize整个2-D数组与默认构造函数,或者类似于C ++ 98,
T arr[M][N] = {}; // C++98
但是,在您的情况下,类型std::string
提供默认构造函数,然后是定义
string whitelist[256][1];
为每个元素使用默认构造函数,因此数组中的每个元素都有一个确定值(即空字符串),因此您可以安全地使用它们。这当然与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
}
答案 1 :(得分:0)
包含std::string
元素的数组声明,例如
string whitelist[256][1];
将使用std::string
的默认构造函数(创建一个空字符串)自动初始化每个数组元素。没有必要做任何事情。
你明显的信念是,如果没有额外的努力,你将以某种方式结束&#34;未初始化&#34;字符串在现实中没有根据。