如何将数组分配给固定的矩阵索引?

3

请不要骂我,我是一个C++新手。

这里是代码

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;
}

我该如何将一个数组分配到一个可以包含它的矩阵的固定索引中?我需要在每个(顺序)位置上迭代每个项目吗?我希望能够简单地传递内存块...


1
小的回答,使用std::vector(你正在使用C++,而不是C),大的回答使用指针,因为你不能分配给一个数组 - Ruks
1
@Ruks - 这两个内容都不应该放在评论中。下面有一个大文本框标注为“回答”。 - StoryTeller - Unslander Monica
@StoryTeller 这是真的!但我已经看到一些答案在这里了!所以就让它保持不变吧... - Ruks
1
@Ruks - 如果你已经看到了你同意的答案,请投票支持它们。不要在评论中回答。如果你希望我让它保持原样,请不要滥用评论区。 - StoryTeller - Unslander Monica
3个回答

2

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

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++的做法(在现代C++中,您最好使用std::arraystd::vector)。


似乎输出不正确:http://coliru.stacked-crooked.com/a/148ba7e5956e556d - markzzz
@markzzz 那里有几个错误。1. 你将_same_指针分配给matrix的所有元素(该指针是指向temp第一个元素的指针,其地址永远不会改变)。2.matrix只有3个条目 - 每个条目都是指针。您打印出_pointers_(而不是任何包含的值),并且您尝试在matrix的12个元素中执行此操作,而它只有三个元素。请注意,前三个输出值是有意义的,而其余的则没有。如果您使用std :: vectorstd :: array,编译器将防止您犯这些错误。 - Max Langhof
@markzzz,你正在多次分配相同的行。 要么直接分配矩阵的元素(例如在此处中),要么在填充矩阵之前为矩阵动态分配行(例如使用new[])。 不过,如果这只是为了教学目的,请尝试使用std::vectorstd::array - Marco A.
我需要高性能,这是高级计算(音频)。(仅仅使用向量会增加CPU负担 :)) - markzzz

2
您不能这样做,因为数组不可赋值。
以下是三种可能的解决方法: 我建议首先使用std::array(或std::vector),其次是复制,只有在万不得已时才使用指针。

我需要高性能,这是高级计算(音频)。仅使用向量会增加CPU负担。似乎memcpy越快... - markzzz

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接