2012-11-18 79 views
0

我正在研究實現多級反饋隊列調度程序的代碼。也有一些是在代碼的一部分,不明確:C++進程調度問題

void Scheduler_MFQS :: fill_queue(int clk) { 
    list<Process>::iterator itr; 
    for(itr = processes.begin(); itr != processes.end(); itr++) { 
      if((itr -> has_arrived(clk)) && (!queues[0].contains(*itr))) { 
        Process tmp (*itr); 
        queues[0].add_process(tmp); 
        remove(processes.begin(), processes.end(), *itr); 
      } 
    }  
} 

這是什麼基本上沒有隻是把加工成一定條件下基本隊列。但我不知道Process tmp (*itr);是什麼意思?但是,它合法編譯。這是否意味着創建一個名爲tmp的Process對象?但是下一步,迭代器(*itr)在C++中是什麼意思?

回答

1
"Process tmp (*itr);" mean? 

它調用過程(常量過程& &)複製構造函數來創建TMP對象;

what is the next, iterator (*itr) mean in c++? 

itr是std :: list :: iterator類型,它是一個指向當前列表節點的指針。 * itr獲取itr的內容,這是一個Process。

您的代碼可以增強下面一點,演示:

// list<Process>::iterator itr; // move this into for loop, narrow variable scope and lifetime 
    /*auto if C++11*/ 
    processes.unique(); // you actually only want unique processes from list 
    for(list<Process>::iterator itr = processes.begin(); itr != processes.end(); ++itr) 
                 ^^ call preincrement, faster 
    { 
     if((itr -> has_arrived(clk)) /*&& (!queues[0].contains(*itr))*/) { 
            ^^ process list contains unique item only, no need to compare 
     //Process tmp (*itr); comment out this line, save one object copy 
     queues[0].add_process(*itr);    
     //remove(processes.begin(), processes.end(), *itr); 
     // You don't need to clear item in the loop    
     } 
    } 

    processes.clear(); // or swap with an empty list 
    // std::list<Process> p2; 
    // p2.swap(ps); 
+0

作品非常感謝 – user1177245

1

itr是指向一些容器元素(在你的情況下列表)的迭代器。當您在迭代器上使用星號(*)時,您可以訪問其內容,即列表的實際元素。在你的情況下,它是一個Process對象。

+0

是的,我知道* ITR意味着列表流程元素,但什麼是「過程TMP(* ITR);」在C++中是什麼意思?從來沒有遇到過這樣的格式...... – user1177245

+0

它是通過複製構造函數構造Process對象(tmp)。 – ixSci