如何初始化一个私有的多维数组

3

我该如何初始化一个私有数组,其中一百个元素每个都等于一个两项数组,例如{-1, 0}。由于我正在向你们所有人提问,因此我下面的代码显然不起作用。

example.h:

#ifndef EXAMPLE
#define EXAMPLE

class Example {
private:
    char grid[10][10];
public:
    Example();
};

#endif

example.cpp:

#include "example.h"
#include <iostream>

Example::Example() : grid({-1, 0}) {}
2个回答

5

目前使用C++无法实现此功能。在C++0x中,可以使用大括号来实现,例如:

Example::Example() : grid{{-1, 0}} {}

目前可以将该数组封装在一个类中,而不会有任何性能损失(该数组仍然是一个普通的、本地的多维数组)

class Example {
private:
    struct data {
      char grid[10][10];
      static data newData() {
        data d = {{
          { -1, 0 }, { -2, 1 } /* ... */
        }};
        return d;
      }
    } d;

public:
    Example() : d(data::newData()) { }
};

嗯,如果我愿意妥协并初始化grid[10][10][2],使得这200个项目都为0,那该怎么办? - Tyler Crompton
@Tyler 那么你可以直接写成 Example() : grid() {}。这样就可以了。 - Johannes Schaub - litb
嗯,我找到了一个与你在答案中最初提到的内容非常相关的链接:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm - Tyler Crompton

2

很不幸,您无法像这样初始化成员。您必须在构造函数体中使用std::fill(或好老的=和循环)手动为每个值分配。

这将在C ++ 0x中更改,其中您可以编写像您发布的代码一样的代码。

(另外,您在问题中存在不匹配。您声明了一个由10个数组组成的数组,每个数组有10个字符,但您的初始化尝试根本不符合该用例。确切地说,您试图做什么并不是很清楚,但由于您必须以任何方式使用不同的方法,所以对于这个答案来说并不是很重要。)


这怎么会不清楚呢?你是直接跳到代码那一部分了吗?我想要一百个像{-1, 0}这样的数组。10x10网格比只有100个元素的数组更必要,因为这是一个二维网格。 - Tyler Crompton
@Tyler:不,我看了问题。由于代码和文字描述完全不同,因此不清楚您试图做什么。您的初始化尝试是为两个元素的一维数组,而不是一个10x10的二维数组。 - Lightness Races in Orbit
我也提到了我知道这个代码是不正确的。我想这个代码示例可能会扩展我所说的内容,但我猜它的执行效果并不如计划的那样。 :/ - Tyler Crompton
@Tyler:别担心,我们现在知道你的意思了。我的回答依然有效。 - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接