c++ - 将静态二维数组的行分配给另一个行

标签 c++ multidimensional-array notation

这是我目前所拥有的:

    typedef const float Chord[6];

    static Chord progressionOne[] = {
        {5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5},         // i
        {5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0}, // VI
        {0.75, 1.0, 1.25, 1.5, 2.0, 2.5},                       // III
        {1.125, 1.5, 1.875, 2.25, 3.0, 3.75}                      // VII
    };

    static Chord progressionTwo[] = {
        progressionOne + 1, //VI
        progressionOne + 3, //VII
        progressionOne + 0, // i
        progressionOne + 0,
    };

这似乎是我在几轮修改我的符号、交换星号和调整 typedef 中所能得到的最接近的结果。我想要的是重新排列 progressionTwo 的行,生成 progressionTwo,希望在上下文中清楚。我不介意数据重复或毛茸茸的符号——我只想成为 DRY足以避免两次键入实际值。

...我真的需要抽时间阅读标准 :/

最佳答案

如果您真的希望这些是简单的数组,您可以简单地为和弦创建 #define 宏(预处理器定义),并使进程引用这些和弦:

typedef const float Chord[6];

#define CHORD_I { 5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5 }
#define CHORD_VI { 5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0 }
#define CHORD_III { 0.75, 1.0, 1.25, 1.5, 2.0, 2.5 }
#define CHORD_VII { 1.125, 1.5, 1.875, 2.25, 3.0, 3.75 }

const Chord progressionOne[] = {
    CHORD_I,
    CHORD_VI,
    CHORD_III,
    CHORD_VII,
};

const Chord progressionTwo[] = {
    CHORD_VI,
    CHORD_VII,
    CHORD_I,
    CHORD_I,
};

不过,预处理器定义很困惑。

如果将 Chord 变成一个成熟的类,您可以用相同的方式将它们定义为局部变量或静态变量,但具有更高的类型安全性和灵 active 。然后你可以引用 progressionOne 同时定义 progressionTwo 你想要的方式(至少你可以用局部变量。用全局变量,你可能会遇到 "static order initialization fiasco" )

关于c++ - 将静态二维数组的行分配给另一个行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741819/

相关文章:

java - 拆分字符串两次

css - 像乐谱一样灵活的图像缩放/拉伸(stretch)

javascript - 访问对象属性时,括号表示法是否比句点表示法慢?

c++ - 该代码段中是否会发生死锁,为什么?

c++ - 检测闰年有问题

c++ - 警告 C26812 : Enum type is unscoped. 优先选择枚举类而不是枚举

haskell - Haskell中括号内的双点是什么意思?

头文件中的 C++ 'using' 和 'using typename'

python - 将数组值与多维数组中的数组值进行匹配

javascript - 如何创建二维数组数组?