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

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

C ++注意事项:数组初始化有一个很好的列表初始化列表。我有一个

int array[100] = {-1};

期望它充满-1,但它不是,只有第一个值,其余的是0与随机值混合。

代码

int array[100] = {0};

工作正常,并将每个元素设置为0。

我在这里想念的是什么..如果值不为零,不能初始化它吗?

2:默认初始化(如上所述)是否比通过整个数组的通常循环更快并分配一个值还是做同样的事情?


MM们
浏览 768回答 3
3回答

慕容3067478

使用您使用的语法,int&nbsp;array[100]&nbsp;=&nbsp;{-1};说“将第一个元素设置为-1其余部分0”,因为所有省略的元素都设置为0。在C ++中,要将它们全部设置为-1,您可以使用类似std::fill_n(from&nbsp;<algorithm>)的内容:std::fill_n(array,&nbsp;100,&nbsp;-1);在便携式C中,您必须自己循环。有编译器扩展,或者您可以依赖实现定义的行为作为快捷方式,如果这是可接受的。

郎朗坤

您链接到的页面已经给出了第一部分的答案:如果指定了显式数组大小,但指定了较短的初始化列表,则未指定的元素将设置为零。没有内置方法将整个数组初始化为某个非零值。至于哪个更快,通常的规则适用:“给编译器最大自由的方法可能更快”。int&nbsp;array[100]&nbsp;=&nbsp;{0};只需告诉编译器“将这100个int设置为零”,编译器可以自由优化。for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;100;&nbsp;++i){ &nbsp;&nbsp;array[i]&nbsp;=&nbsp;0;}更具体。它告诉编译器创建一个迭代变量i,它告诉它应该初始化元素的顺序,依此类推。当然,编译器很可能会对此进行优化,但关键在于您在此处过度指定问题,迫使编译器更加努力地获得相同的结果。最后,如果要将数组设置为非零值,则应该(至少在C ++中)使用std::fill:std::fill(array,&nbsp;array+100,&nbsp;42);&nbsp;//&nbsp;sets&nbsp;every&nbsp;value&nbsp;in&nbsp;the&nbsp;array&nbsp;to&nbsp;42同样,您可以对数组执行相同操作,但这更简洁,并为编译器提供更多自由。你只是说你想要整个数组填充值42.你没有说明它应该以什么顺序完成,或者其他任何事情。
打开App,查看更多内容
随时随地看视频慕课网APP