【问题标题】:How to Initialize a Private Multidimensional Array如何初始化私有多维数组
【发布时间】:2011-07-28 19:41:56
【问题描述】:

我将如何初始化一个私有数组,其中一百个项目每个等于两个项目数组,例如{-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}) {}

【问题讨论】:

    标签: c++ class multidimensional-array initialization private


    【解决方案1】:

    目前这在 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 然后你可以说Example() : grid() {}。这工作正常。
    • 嗯,我找到了一个与您在答案中首先说的内容非常相关的链接:open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    【解决方案2】:

    很遗憾,您不能像这样初始化成员。您必须使用 std::fill(或旧的 = 和循环)手动分配构造函数主体中的每个值。

    不过,这将在 C++0x 中发生变化,您可以在其中编写与您发布的代码类似的代码。

    (另外,您的问题不匹配。您声明了一个由 10 个数组组成的数组,每个数组包含 10 个字符,但您的初始化尝试与该用例没有任何相似之处。目前还不清楚您到底是什么正在尝试这样做,但是由于无论如何您都必须使用不同的方法,我想这对这个答案并不重要。)

    【讨论】:

    • 怎么不清楚?你直接跳到代码了吗?我想要像{-1, 0} 这样的一百个数组。 10x10 网格对于 100 个数组来说是必需的,因为这是一个二维网格。
    • @Tyler:不,我读过这个问题。目前尚不清楚您要做什么,因为代码尝试说的内容与文本完全不同。您的初始化尝试是针对二元素一维数组,而不是 10x10 二维数组。
    • 我还提到我知道代码不正确。我认为代码示例可能会建立在我所说的基础上,但我想它并没有按计划进行。 ://
    • @Tyler:不用担心;我们现在知道你的意思了。我的答案是正确的。
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2013-04-04
    • 2011-04-03
    • 2015-07-20
    • 2015-02-26
    相关资源
    最近更新 更多