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

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

于 2012-11-18T03:39:21.250 回答
1
"Process tmp (*itr);" mean?

它调用 Process(const Process& &) 复制构造函数来创建 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);
于 2012-11-18T03:43:25.817 回答