只保留数据结构的一些变化

时间:2013-04-14 12:37:47

标签: c arrays reference struct

我不确定,关于问题的标题,但问题就在这里。

我有一个结构数组,现在我通过引用函数传递它,其中我有一个相同结构的优先级队列。

现在,我通过使用优先级队列处理我的数组,并且在流程结束时,我将拥有我的结构中的两个属性(比如AB) ,在数组中更改,而我只希望其中一个更改(A)反映在函数外部,我希望另一个(B)更改恢复,通过之前的方式数组。我必须这样做,因为第二次当我必须处理相同的数组,但使用不同的参数时,我希望A的更改保留,但B不能。

我现在所做的是,在这个过程之后,一旦我不在函数中,我处理整个数组,并且我在哪里为属性B更改了值我将其恢复为初始值。现在这显然是一个对我不利的O(n2)操作。

我能做些什么来提高效率。

我正在与C合作。

1 个答案:

答案 0 :(得分:1)

例如,如果B的类型为bool,则可以在函数中创建bool数组。使用优先级队列中的输入数组(整数)的索引而不是结构。使用bool数组访问输入数组的B

void func(Type *Input, size_t n) 
{
    bool B[n];
    queue<size_t> pqueue;
    for (size_t i = 0; i < n; i++)
       B[i] = Input[i].B;
    size_t index;
    while (index = pqueue.front()) {
       // do something with Input[index]
       // B[index] = false;
       // rest of the function
    }
}