在Matlab中的while循环中添加和删除数组中的元素

时间:2015-04-11 22:54:10

标签: arrays matlab

我必须在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

1 个答案:

答案 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