2014-02-11 41 views
1

我已經創建了一個內存管理器程序,它使用鏈表中的節點存儲節點的作業號和節點使用的內存的開始和結束字節。C++鏈表報表功能

我很難想辦法讓我的report_jobs函數起作用。我想輸出看起來像這樣

JOB   Memory Usage 

1   10 – 50 54 – 75 200 – 240 
5   1 – 9 101 – 134 
3   180 – 184 185 – 192 

的事實,多個節點可以有同樣的工作,我有麻煩搞清楚如何通過這個循環,這樣就只有一次打印作業,但遍歷所有節點並查看它是否有該作業號,然後打印開始和結束字節。

下面是一些示例代碼,我搞亂了,即時積極的我過了複雜的事情,我只是需要看到它在一個更簡單的方式。

void report_jobs(void) 
{ 
    ALLOCPTR t = alloclist; 
    ALLOCPTR m = alloclist; 
    int numberofnodes = 0; 
    int job = 0; 

while(m!=NULL) 
{ 
jobb++; 

    while(t!=NULL) 
    { 
      if(t->id == job) 
      { 
       cout << t->id << t-> start_byte << t-> end_byte << endl; 

      } 
      t = t->next; 


    } 


    m = m->next 

} 
+0

爲什麼不把這些信息放在字典中並輸出 – michaeltang

+0

這不是微不足道的。您需要針對您的工作彙總(排序?)地址範圍。根據您的預期用例,您需要引擎蓋下的一些東西才能正常運行。例如,如果您需要使用的工作id的界限很低,則可以創建一個結構來保存起始和結束字節,併爲此結構的鏈表創建一個適當長的向量來組織數據。如果工作id變得瘋狂,那麼可以使用結構鏈表的散列。 –

回答

1

也許你想要做的我們用鍵安裝在作業ID哈希表或索引表,並填充爲您遍歷列表中的開始和結束字節的信息條目的內容。

然後,再次通過表格來生成輸出。

for (i in alloclist) { 
    table[i->id].populate(i->start_byte, i->end_byte); 
} 

for (j in table) { 
    std::cout << table[j]; 
}