c++ - 初始化静态二维数组

标签 c++ arrays static

以下代码:

enum Type {Prince, Princess, King, Queen, NumTypes};
enum Country {England, Belgium, Netherlands, NumCountries};

class Factory {
    static const std::array<std::array<int, NumTypes>, NumCountries> probabilities;
    static std::array<std::array<int, NumTypes>, NumCountries> initializeProbabilities() {
        std::array<std::array<int, NumTypes>, NumCountries> p;
        p[England] =     {29, 60, 80, 100};
        p[Belgium] =     {31, 66, 81, 100};
        p[Netherlands] = {25, 45, 90, 100};
      return p;
    }
};
const std::array<std::array<int, NumTypes>, NumCountries> Factory::probabilities = initializeProbabilities();

如果我更改枚举 Country 中元素的顺序是安全的,但是对于将来对枚举 Type 元素进行任何重新排序是不安全的。在不一一初始化所有 12 个元素的情况下避免该问题的最佳方法是什么?

最佳答案

为了避免对顺序的依赖,你应该这样写:

p[England][Prince]=29;
p[England][Princess]=60;
p[England][King]=80;
p[England][Queen]=100;

p[Belgium][Prince]=31;
p[Belgium][Princess]=66;
p[Belgium][King]=81;
p[Belgium][Queen]=100;

关于c++ - 初始化静态二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986000/

相关文章:

c++ - 如何实现 stack::top() 函数?

c++ - WaitForSingleObject 不会超时

c++ - 两个指针什么时候可以比较?

c - 二维数组名称第一个元素

JQuery inArray 返回 true

java - 访问静态最终实例变量进入静态方法错误

c++ - 如何将表示指数形式的十进制数的字符串转换为 Qt 中的 float ?

java - java中的数组结构

java - 为什么我不能从其内部类的非静态方法中引用封闭类的非静态变量?

inheritance - Typescript 不允许具有不同构造函数签名的类的 typeof 继承