Matlab Struct中的Push_back元素

时间:2013-08-12 08:24:57

标签: arrays matlab struct

Matlab 中,我有一个简单的结构,我想构建一个这种结构的数组(我知道如何做到这一点)。我的问题:有没有办法简单地将一个元素插入到该数组而不必告诉该数组在位置它应该是什么?类似于c ++中的" push_back" 函数,它只是将元素放在向量的末尾,是否存在于Matlab语言中?

2 个答案:

答案 0 :(得分:2)

您可以将索引与end

结合使用
a_struct = struct('x', 1);
a_struct(end+1) = struct('x', 2); % this writes the element to the `end+1`'th-position
disp(a_struct)

会给你:

1x2 struct array with fields:
    x

但请注意,在引擎盖下,没有任何预分配,因为可能存在c ++向量等。 因此,end+1的每个赋值都将在内部导致使用一个附加元素制作旧结构的副本。 参见例如http://blogs.mathworks.com/loren/2008/02/01/structure-initialization/#7对此提出意见。

答案 1 :(得分:0)

听起来你想迭代地扩展数组(向量)。这在MATLAB中非常低效,因为随着向量的增长,它将导致大量的重新分配。

在MATLAB中,最好事先(正确大小)分配矢量并直接索引,或使用arrayfun构造数组。

这与 std::vector中的问题完全相同, 更好地分配一次,然后使用std::back_inserter与{相比{ {1}}。