为了账号安全,请及时绑定邮箱和手机立即绑定

使用一个默认值初始化普通数组

使用一个默认值初始化普通数组

C++
MM们 2019-08-09 11:09:04
使用一个默认值初始化普通数组C ++注意事项:数组初始化有一个很好的列表初始化列表。我有一个int array[100] = {-1};期望它充满-1,但它不是,只有第一个值,其余的是0与随机值混合。代码int array[100] = {0};工作正常,并将每个元素设置为0。我在这里想念的是什么..如果值不为零,不能初始化它吗?2:默认初始化(如上所述)是否比通过整个数组的通常循环更快并分配一个值还是做同样的事情?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

使用您使用的语法,

int array[100] = {-1};

说“将第一个元素设置为-1其余部分0”,因为所有省略的元素都设置为0

在C ++中,要将它们全部设置为-1,您可以使用类似std::fill_n(from <algorithm>)的内容:

std::fill_n(array, 100, -1);

在便携式C中,您必须自己循环。有编译器扩展,或者您可以依赖实现定义的行为作为快捷方式,如果这是可接受的。


查看完整回答
反对 回复 2019-08-09
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您链接到的页面已经给出了第一部分的答案:

如果指定了显式数组大小,但指定了较短的初始化列表,则未指定的元素将设置为零。

没有内置方法将整个数组初始化为某个非零值。

至于哪个更快,通常的规则适用:“给编译器最大自由的方法可能更快”。

int array[100] = {0};

只需告诉编译器“将这100个int设置为零”,编译器可以自由优化。

for (int i = 0; i < 100; ++i){
  array[i] = 0;}

更具体。它告诉编译器创建一个迭代变量i,它告诉它应该初始化元素的顺序,依此类推。当然,编译器很可能会对此进行优化,但关键在于您在此处过度指定问题,迫使编译器更加努力地获得相同的结果。

最后,如果要将数组设置为非零值,则应该(至少在C ++中)使用std::fill

std::fill(array, array+100, 42); // sets every value in the array to 42

同样,您可以对数组执行相同操作,但这更简洁,并为编译器提供更多自由。你只是说你想要整个数组填充值42.你没有说明它应该以什么顺序完成,或者其他任何事情。


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 767 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信