2013-04-14 55 views
1

我不確定,關於問題的標題,但這是問題所在。只保留數據結構的一些變化

我有一個結構數組,現在我通過引用將它傳遞給一個函數,其中有一個具有相同結構的優先級隊列。

現在,我通過使用優先級隊列來處理數組,並且在進程結束時,我將擁有兩個屬性(說AB)我的結構,在數組中已更改,而I只想將其中一個變化(A)反映到該函數之外,並且我希望另一個(B)更改以傳遞數組之前的方式進行恢復。我必須這樣做,因爲第二次當我必須處理相同的數組,但使用不同的參數時,我希望A的變化保持不變,但B不變。

我現在要做的是,在這個過程之後,一旦我退出函數,我將處理整個數組,並且我的值已更改爲屬性B的值,然後將其恢復爲初始值。現在這顯然是一個O(n2)的操作,這對我來說並不合適。

我可以做些什麼來提高效率嗎?

我與C.

工作
+0

通過值而不是通過引用傳遞結構的陣列。讓DOT NET框架爲您做好工作。 –

+1

當你說O(n2)你的意思是n平方還是n-two? –

回答

1

如果您Bbool型的,例如,您可以創建功能的bool陣列。使用優先級隊列中的輸入數組(整數)的索引而不是結構。使用bool陣列訪問輸入陣列的B S:

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 
    } 
} 
+1

基本上,將所有B屬性複製到另一個數組中,並在需要時使用該屬性代替結構。 – Kraken