我在 MATLAB 中有一个对象数组,我在循环中调用了它们的构造函数:
antsNumber = 5;
for counter = 1: antsNumber
ant(counter) = TAnt(source, target);
end
MATLAB 警告我使用预分配来加快进程。我确实知道预分配的好处,但我不知道如何为对象执行此操作。
最佳答案
这里有一些选项,它们要求您为 TAnt
设计类构造函数,以便它能够处理 no input argument case :
您可以创建默认的
TAnt
对象(通过调用不带输入参数的构造函数)并使用 REPMAT 复制它在进入 for 循环之前初始化数组:ant = repmat(TAnt(),1,5); %# Replicate the default object
然后,您可以遍历数组,用新对象覆盖每个默认对象。
如果您的
TAnt
对象都使用相同的数据进行初始化,并且它们不是从 handle class 派生的,您可以创建 1 个对象并使用 REPMAT复制它:ant = repmat(TAnt(source,target),1,5); %# Replicate the object
这将使您完全避免循环。
如果
TAnt
是从handle class派生的,上面的第一个选项应该可以正常工作,但第二个选项不会,因为它会给你 相同 对象的句柄的 5 个副本,而不是 distinct 的 5 个句柄对象。
关于oop - 如何在 MATLAB 中预分配类数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510427/