如何将巨大的2D数组初始化为类中的空格?

时间:2016-03-27 05:48:53

标签: c++ arrays multidimensional-array

首先让我告诉你,我研究过C和C ++,但我对OOP的了解非常有限。 我基本上希望只要我创建一个类输出对象,我的整个数组就会被初始化为空格(char no.32)。 MAXROWS和MAXCOLS定义为const int,目前为25和80,但我可以更改它们。

@Bean
public static Map<String, Object> allProperties() {
    Map<String, Object> rtn = new HashMap<>();
    if (env instanceof ConfigurableEnvironment) {
        for (PropertySource<?> propertySource : ((ConfigurableEnvironment) env).getPropertySources()) {

            if (propertySource instanceof EnumerablePropertySource) {
                for (String key : ((EnumerablePropertySource) propertySource).getPropertyNames()) {
                    rtn.put(key, propertySource.getProperty(key));
                }
            }
        }
    }
    return rtn;
}

2 个答案:

答案 0 :(得分:1)

class output {
    //...
    output() {
        memset( &outpt[0][0], ' ', sizeof(char) * MAXROWS * MAXCOLS );
    }
}

这将从输出[0] [0]的地址开始将(MAXROWS * MAXCOLS)个字符设置为&#39;的值。 &#39; (32)。由于您将每个元素设置为相同的值,因此这是一种快速的方法。

您可以在构造函数中清除数组,对于初学者。

答案 1 :(得分:1)

要初始化一个类,必须使用所谓的构造函数。例如像这样

#include <cassert>
#include <algorithm>

const std::ptrdiff_t max_rows;
const std::ptrdiff_t max_cols;

class output {
private:
    char data_[max_rows][max_cols];
public:
    output()
    {
        assert(max_rows > 0 && max_cols > 0);
        std::fill_n(&data_[0][0], max_rows*max_cols, ' ');
    }

    void print() { /* your output */ }
};

对于此维度尺寸处理,使用boost::multi_array容器或std::array会更好。这些C风格的数组非常容易出错。即使这样也可以更安全

class output {
private:
    std::array<char,max_rows*max_cols> data_;
public:
    output()
    {
        for (char& x : data_)  // can not be out of bounds
            x = ' ';
        // std::fill(data_.begin(), data_.end(), ' ');
    }

    void print() { /* your output */ }
};