c ++进程调度问题

时间:2012-11-18 03:28:21

标签: c++ iterator

我正在研究实现多级反馈队列调度程序的代码。部分代码中有一些不清楚的地方:

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对象?但是c ++中的下一个迭代器(*itr)是什么意思?

2 个答案:

答案 0 :(得分:1)

itr 是指向某个容器元素的迭代器(在您的情况下为列表)。在迭代器上使用星号(*)时,您可以访问其内容,即访问列表的实际元素。在您的情况下,它是一个Process对象。

答案 1 :(得分:1)

"Process tmp (*itr);" mean?

它调用Process(const Process&amp;&amp;)复制构造函数来创建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);