我创建了一个内存管理器程序,该程序使用链接列表中的节点来存储节点的作业号以及该节点使用的内存的开始和结束字节。

我在想办法使report_jobs函数正常工作时遇到麻烦。我希望输出看起来像这样

JOB         Memory Usage

1           10 – 50 54 – 75 200 – 240
5           1 – 9 101 – 134
3           180 – 184 185 – 192

由于多个节点可能具有相同的作业,因此我很难弄清楚如何循环执行此操作,以便它只会打印一次作业,但要遍历所有节点并查看是否具有该作业编号,然后再打印起始字节和结束字节。

这是一些我正在弄乱的示例代码,很肯定,我要使事情复杂化,我只需要以更简单的方式查看它即可。
void report_jobs(void)
{
    ALLOCPTR t = alloclist;
    ALLOCPTR m = alloclist;
    int numberofnodes = 0;
    int job = 0;

while(m!=NULL)
{
 jobb++;

    while(t!=NULL)
    {
            if(t->id == job)
            {
                cout << t->id << t-> start_byte << t-> end_byte << endl;

            }
            t = t->next;


    }


   m = m->next

}

最佳答案

您可能想做的事情是使用在作业ID上键入的哈希表或索引表,并在遍历列表时用开始和结束字节信息填充该条目。

然后,再次遍历表以生成输出。

for (i in alloclist) {
    table[i->id].populate(i->start_byte, i->end_byte);
}

for (j in table) {
    std::cout << table[j];
}

关于c++ - C++链表报告功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21692377/

10-10 08:24