我正在研究实现多级反馈队列调度程序的代码。部分代码中有一些不清楚的地方:
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)
是什么意思?
答案 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);