用true初始化布尔数组的麻烦

时间:2019-09-10 13:37:53

标签: c++ boolean c++14

我试图了解如何初始化bool数组,我尝试使用memset并成功了,但是当我尝试直接对其进行初始化时,我失败了。

bool prime[n+1] ;
memset(prime,true,sizeof(prime));

-这可行。

但以下不是。

bool prime[n+1] = {1};
//memset(prime,true,sizeof(prime));

我也尝试了以下方法。

bool prime[n+1] = {1};

2 个答案:

答案 0 :(得分:4)

它会初始化您的数组。 brace-enclosed initialization就是这样工作的。第一个数组元素初始化为1,它转换为true,所有其他元素初始化为0,它转换为false。这个:

bool v[10] = { 1 };

与您拥有的相同:

bool v[10] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

您可以使用std::fill功能和朋友:

std::fill(std::begin(v), std::end(v), true);
std::fill_n(v, 10, true);

答案 1 :(得分:1)

像这样初始化数组:

bool foo[10] = {1};  // initialize only the first element to 1, the rest get 0.

您需要使用memset方法,否则在初始值设定项列表中提供n个值

bool foo[10] = {1,1,1,1,1,1,1,1,1,1};

或使用std :: fill,循环或其他任何方式设置所有值。