【发布时间】:2013-08-13 11:53:06
【问题描述】:
在 Matlab 中,我有一个简单的结构,我想构建一个这种结构的数组(我知道怎么做)。我的问题:有没有一种方法可以简单地将一个元素插入到该数组中而不必告诉该数组应该在 位置 中?在 Matlab 语言中是否存在类似于 c++ 中的 "push_back" 函数的东西,它只是将您的元素放在向量的末尾?
【问题讨论】:
在 Matlab 中,我有一个简单的结构,我想构建一个这种结构的数组(我知道怎么做)。我的问题:有没有一种方法可以简单地将一个元素插入到该数组中而不必告诉该数组应该在 位置 中?在 Matlab 语言中是否存在类似于 c++ 中的 "push_back" 函数的东西,它只是将您的元素放在向量的末尾?
【问题讨论】:
您可以将索引与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 用于 cmets。
【讨论】:
【讨论】:
foo(end+1)=bar; 应该可以解决问题。但请注意,随着向量大小的变化,这会导致重新分配。如果你想分配一次,你必须知道正确的大小并使用1:end之间的索引。