在初始化列表中初始化数组的更好方法

时间:2018-05-14 09:07:45

标签: c++ arrays initializer-list

所以假设我有这个结构

struct CAddition {
    int x;
    int y;
    int c;
    int z[3];
    int result() { 
        return x + y; 
    }
    CAddition();
    ~CAddition();
};
CAddition::CAddition()
    :x(0)
    ,y(2)
    ,z()
    ,c(result())
{

}

现在在构造函数中我初始化了z,它是struct ,z()的数组成员,它用零输出初始化值,现在当我尝试这个其他语法时

,z{} 

,z{0,0,0}

他们都输出相同的结果 有没有一种更有效的方法在构造函数中初始化一个数组,除了上面两个,并且3个方法有什么不同,我检查了不同的网站进行初始化,他们使用了这两种方法

2 个答案:

答案 0 :(得分:0)

如果要使用默认值0初始化数组中的所有元素,则使用z {0}非常快。或者,如果要使用值-1初始化,可以使用memset():

CAddition::CAddition()
:x(0)
,y(2)
,c(result())
{
   memset(z, -1, 3 * sizeof(int));
}

请注意,memset()适用于字节,而不是数字。如果需要使用数字填充数组,则可以使用fill_n()。

答案 1 :(得分:0)

如果通过“更有效的方式”,你的意思是花费更少的时间来构建CAddition,那么就没有。{/ p>

构造CAddition的最快方法是将数组初始化为全零,这是默认行为。

对于3个项目的数组,花费的时间可以忽略不计,但如果数组的大小非常大,则可能需要很长时间,在这种情况下,最好使用std::vectorreserve代替了一些空间。