【发布时间】:2010-11-02 13:54:23
【问题描述】:
我有一个整数矩阵,它应该像一个缓冲区:
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
现在,如果我添加一个新行 {3, 3, 3, 3, 3},新矩阵应该如下所示:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
有没有一种巧妙的方法可以在不复制所有元素的情况下做到这一点?
【问题讨论】:
-
以下多个答案在技术上是正确的,但它们都涉及不同的权衡。你能扩展一下你的预期用途吗?这些矩阵有多大?与您从矩阵中访问数据的次数相比,您希望添加一行的频率是多少?您将访问矩阵的各个元素,还是仅将其从头到尾作为整个实体读取?您是否希望能够不时释放部分矩阵?如果是这样,只是从末尾开始,还是从开头开始,还是从任意行开始?
-
矩阵不大(总共有 100 个元素)。我将始终访问整个矩阵,“旧”行可以消失(fifo 队列行为),更新经常发生。
-
在这种情况下,@ruslik 提出的模数方法可能是您最好的选择。只需分配一个可以处理最大大小的数组,维护一个指向当前头部的指针,并在空间不足时环绕数组的末尾。