我必须在Matlab中的while循环中向结构数组(active_nodes)添加两个new_element。元素的添加取决于if语句的真实值。我使用以下方式,但这使我的代码非常慢,因为我不能预先分配'active_nodes'。任何人都可以建议我一些有效的方法来完成这项工作。因为事先不知道这个数组的确切长度并且首先删除一个元素然后在while循环的每次传递中添加两个新元素导致程序大大减慢。因为我在数组中只有一个元素的方式while isempty(active_nodes)==0
current_node = active_nodes(1);
active_nodes(1) = [];
if fval < some_statement
[new_element(1), new_element(2)] = calculating_new_element(current_node)
active_nodes = [new_element, active_nodes]
end
答案 0 :(得分:0)
您可以通过在列表末尾添加新元素(实际上,反转列表并向后读取)并使用指针保存最大的有效索引来消除元素的删除。这也消除了某些元素的创建。
如果您通过预先分配数组了解列表中任何一个元素的最大数量,则可以完全消除元素的创建。
active_nodes = zeros(1, MAX_ELEMENTS); %// if possible
active_nodes(1) = first_element;
p = 1; %// current highest valid index
while p > 0
current_node = active_nodes(p); %// "pop" top element from stack
p = p - 1; %// and point to next element
if fval < some_statement
[new_element(2), new_element(1)] = calculating_new_element(current_node)
%// order of new_element values reversed, because list is reversed
active_nodes(p+1:p+1) = new_element;
p = p + 2 %// 2 new elements in list
end
end