【问题标题】:How can I assign an array to a fixed matrix index?如何将数组分配给固定矩阵索引?
【发布时间】:2019-03-17 13:58:42
【问题描述】:

别杀我:我是 C++ 菜鸟。

这是code

const int lengthA = 3;
const int lengthB = 4;

int main() {
    double matrix[lengthA][lengthB];
    double temp[lengthB];

    for (int i = 0; i < lengthB; i++) {
        temp[i] = i;
    }

    matrix[1] = temp;
}

如何将数组分配给可以包含它的矩阵的固定索引?我应该在每个(顺序)位置上迭代每个项目吗?我希望我可以简单过去的记忆...

【问题讨论】:

  • 小答案,使用std::vector(您使用的是C++,而不是C),大答案使用指针,因为您无法分配给数组
  • @Ruks - 这两个都不属于评论。下方有一个标有“答案”的大文本框。
  • @StoryTeller 这是真的!但我已经在这里看到了一些答案!所以就这样吧……
  • @Ruks - 如果您已经看到您同意的答案,请投票。不要在 cmets 中回答。如果您希望我顺其自然,请不要滥用评论部分。

标签: c++ arrays multidimensional-array assign


【解决方案1】:

您不直接分配 raw 数组,而是复制它们的内容或处理指向数组的指针

int main() {
    double* matrix[lengthA]; // Array of pointers, each item may point to another array
    double temp[lengthB]; // Caveat: you should use a different array per each row

    for (int i = 0; i < lengthB; i++) {
        temp[i] = i;
    }

    matrix[1] = temp;
}

请记住,这不是现代 C++ 做事方式(最好使用 std::arraystd::vector

【讨论】:

  • @markzzz 有几个错误。 1. 您将 same 指针分配给matrix 的所有元素(该指针指向temp 的第一个元素,其地址永远不会改变)。 2. matrix 只有 3 个条目 - 每个条目都是一个指针。您打印出 pointers(不是任何包含的值),并且您尝试为 matrix 的 12 个元素这样做,而它只有三个。请注意前三个输出值是如何有意义的,而其余的则没有。如果您改用std::vectorstd::array,编译器会阻止您犯这些错误。
  • @markzzz 您多次分配同一行。直接分配给矩阵的元素(如here)或在填充矩阵之前为矩阵动态分配行(例如使用new[])。不过说真的,试试std::vectorstd::array,除非这只是为了教学目的。
  • 我需要性能,它的高级计算(音频)。简单地使用向量增加 CPU :)
【解决方案2】:

您可以使用double *matrix[lengthB]; 代替double matrix[lengthA][lengthB];

【讨论】:

    【解决方案3】:

    你不能,数组是不可赋值的。

    这里有三种可能的解决方法:

    我建议首先使用std::array(或std::vector),然后复制,最后才使用指针。

    【讨论】:

    • 我需要性能,它的高级计算(音频)。简单地使用向量增加 CPU :)。看来memcpy更快了……
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2014-10-07
    • 2023-03-20
    • 1970-01-01
    • 2017-05-22
    • 2015-04-04
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多