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

这个问题在这里已经有了答案:

  • 如何初始化一个数组的所有成员为相同的值? 19个答案

  • 使用您使用的语法,

    int array[100] = {-1};
    

    说的“第一元件设置-1 ,其余的0 ”,因为所有的元件省略都设置为0

    在C ++中,为了将它们全部设置为-1 ,你可以使用类似std::fill_n (来自<algorithm> ):

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

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


    gcc编译器有一个扩展,它允许使用以下语法:

    int array[100] = { [0 ... 99] = -1 };
    

    这会将所有元素设置为-1。

    这就是所谓的“指定初始化器”,在这里可以获得更多信息。

    注意这不是为gcc c ++编译器实现的。


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

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

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

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

    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的值。你不应该以什么顺序说明它应该完成的任何事情,或者其他任何事情。

    链接地址: http://www.djcxy.com/p/78481.html

    上一篇: Initialization of a normal array with one default value

    下一篇: Convert XML string to a stream in android