0

マルチレベル フィードバック キュー スケジューラを実装するコードに取り組んでいます。コードの一部に不明な点があります。

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++ で何を意味するのでしょうか?

4

2 に答える 2

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

Process(const Process &&)コピーコンストラクターを呼び出して、tmpオブジェクトを作成します。

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

itrはstd::list :: iteratorタイプであり、現在のリストノードへのポインタです。* itrは、プロセスであるitrのコンテンツを取得しています。

あなたのコードは、以下のようにデモを少し強化することができます:

   // 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);
于 2012-11-18T03:43:25.817 に答える
1

itrは、いくつかのコンテナ要素(あなたの場合はリスト)を指すイテレータです。イテレータでアスタリスク(*)を使用すると、その内容、つまりリストの実際の要素にアクセスできます。あなたの場合、それは Process オブジェクトです。

于 2012-11-18T03:39:21.250 に答える