【问题标题】:Better way to initialize an array in initialization list在初始化列表中初始化数组的更好方法
【发布时间】:2018-05-14 09:07:45
【问题描述】:

假设我有这个结构

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 ,它是结构 ,z() 的一个数组成员,它输出带有零的初始化值,现在当我尝试其他语法时

,z{} 

,z{0,0,0}

它们都输出相同的结果 除了上述两种方法之外,还有没有更有效的方法在构造函数中初始化数组?这三种方法有什么区别吗?我检查了不同的网站进行初始化,他们使用了这两种方法

【问题讨论】:

  • 用 z[...] 设置值
  • 您在问是否有“更好”的方法。为此,您需要为您定义什么构成“好/坏”。 如何其他方法应该更好,列出的那些缺少什么等?
  • 更好我的意思是更高效,因为数组是内存分配
  • “数组是内存分配” - 我不明白你的意思。您有一个具有自动存储持续时间的数组,那么您担心什么分配?
  • @KillzoneKid 再次阅读问题,先生!这是我的问题,如果我能回答我不会发布它

标签: c++ arrays initializer-list


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果“更有效的方式”是指花费更少的时间来构建CAddition,那么不存在。

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

    3 个项目的数组所需的时间可以忽略不计,但如果数组的大小非常大,则可能需要很长时间,在这种情况下,最好使用 std::vector 和 @987654324 @ 一些空间。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2011-06-05
      • 2015-02-07
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多