如何使用initializer_list

How to use initializer_list

本文关键字:list initializer 何使用      更新时间:2023-10-16

我有:

1) NetBeans2) Qt由Digia v4.8.4。3) MinGW编译器

你能帮我初始化我的数组吗?不幸的是,我失败了。我明白我必须使用initializer_list。但是我的文件要包括什么以及如何组织这些东西对我来说是个谜。

你能帮我一下吗?

Figure.h

#include <initializer_list>
class Figure: public QObject{
    Q_OBJECT
        private:        
                int shape[4][4][4];

Figure.cpp

Figure:: Figure(){
std::initializer_list<int> init;
auto init = std::initializer_list<int>
(    
            {                        
                            {0, 0, 0, 0}, 
                            {0, 1, 1, 0},
                            {0, 0, 1, 0},
                    {0, 0, 0, 0}
                    ,                        
                            {0, 0, 0, 0}, 
                            {0, 0, 1, 0},
                            {0, 1, 1, 0},
                    {0, 0, 0, 0}
                    ,                        
                            {0, 0, 0, 0}, 
                            {0, 1, 0, 0},
                            {0, 1, 1, 0},
                    {0, 0, 0, 0}
                    ,                        
                            {0, 0, 0, 0}, 
                            {0, 1, 1, 0},
                            {0, 1, 0, 0},
                    {0, 0, 0, 0}                        
            }
    );  
...
  private:        
    int shape[4][4][4] {                        
                           {{0, 0, 0, 0}, 
                            {0, 1, 1, 0},
                            {0, 0, 1, 0},
                            {0, 0, 0, 0}}
                    ,                        
                           {{0, 0, 0, 0}, 
                            {0, 0, 1, 0},
                            {0, 1, 1, 0},
                            {0, 0, 0, 0}}
                    ,                        
                           {{0, 0, 0, 0}, 
                            {0, 1, 0, 0},
                            {0, 1, 1, 0},
                            {0, 0, 0, 0}}
                    ,                        
                           {{0, 0, 0, 0}, 
                            {0, 1, 1, 0},
                            {0, 1, 0, 0},
                            {0, 0, 0, 0}}                        
    };
...

在您的特殊情况下,您甚至不需要显式地使用initalizer_list,因为静态数组可以在定义处初始化,这是通过上面示例中的语法完成的(要求符合c++ 11)。

也可以在构造函数初始化列表中初始化shape:

...
Figure::Figure(): shape {
                               {{0, 0, 0, 0}, 
                                {0, 1, 1, 0},
                                {0, 0, 1, 0},
                                {0, 0, 0, 0}}
                        ,                        
                               {{0, 0, 0, 0}, 
                                {0, 0, 1, 0},
                                {0, 1, 1, 0},
                                {0, 0, 0, 0}}
                        ,                        
                               {{0, 0, 0, 0}, 
                                {0, 1, 0, 0},
                                {0, 1, 1, 0},
                                {0, 0, 0, 0}}
                        ,                        
                               {{0, 0, 0, 0}, 
                                {0, 1, 1, 0},
                                {0, 1, 0, 0},
                                {0, 0, 0, 0}}
  } {
  ...
}
...

注意:请注意您在try中遗漏了额外的括号。

你不需要创建一个initializer_list,特别是因为你会试图分配它到你的数组,而不是从它初始化你的数组-这将是非法的。相反,您可以直接在构造函数的初始化列表中初始化数组,如下所示:

Figure::Figure()
    : shape
    {
        {
            {0, 0, 0, 0},
            {0, 1, 1, 0},
            {0, 0, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 0, 1, 0},
            {0, 1, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 1, 0, 0},
            {0, 1, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 1, 1, 0},
            {0, 1, 0, 0},
            {0, 0, 0, 0}
        }
    }
{
    // Body of the constructor...
};

请注意,在c++ 11中,您还可以为数组提供内联初始化式,如下所示:

class Figure: public QObject {
    Figure();
private:
    int shape[4][4][4] {
        {
            {0, 0, 0, 0},
            {0, 1, 1, 0},
            {0, 0, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 0, 1, 0},
            {0, 1, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 1, 0, 0},
            {0, 1, 1, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 0, 0, 0},
            {0, 1, 1, 0},
            {0, 1, 0, 0},
            {0, 0, 0, 0}
        }
    };
};
Figure::Figure() {
    // Body of the constructor...
}