我可以从列表中获取对象并复制它们,但如何删除我复制的对象?

I can get objects from a list and copy them, but how do I delete the objects I copied?

本文关键字:复制 何删除 删除 对象 获取 列表 取对象 我可以      更新时间:2023-10-16

我正在尝试查找阻塞进程列表中具有指定事件编号的所有进程,将它们复制到传输列表中,然后删除它们。复制和移动 Process 对象工作正常,但我无法弄清楚之后如何从阻止的 Process 中删除这些 Process 对象。

ProcessQueue findEventFlag(int eventnum)
{
ProcessQueue transferProcess;
Process process;
list<Process>::iterator it;

for (it = blockedProcess.begin(); it != blockedProcess.end(); it++)
{
process = *it;
if (process.getEvent() == eventnum)
{
process.setState("READY");
process.setEvent(-1);
transferProcess.enqueue(process);
}
}
return transferProcess;
}

在注释的基础上,尝试一下(它依赖于std::list::erase方便地将迭代器返回到列表中的下一项(:

ProcessQueue findEventFlag(int eventnum)
{
ProcessQueue transferProcess;
Process process;
list<Process>::iterator it = blockedProcess.begin();
while (it != blockedProcess.end())
{
process = *it;
if (process.getEvent() == eventnum)
{
process.setState("READY");
process.setEvent(-1);
transferProcess.enqueue(process);
it = process.Erase (it);
}
else
it++;
}
return transferProcess;
}

您还可以使用std::list::splice将元素从一个列表传输到另一个列表,这样可以避免复制process对象,因此可能更有效,例如:

ProcessQueue findEventFlag(int eventnum)
{
ProcessQueue transferProcess;
Process process;
list<Process>::iterator it = blockedProcess.begin();
while (it != blockedProcess.end())
{
process = *it;
list<Process>::iterator next = std::next (it);
if (process.getEvent() == eventnum)
{
process.setState("READY");
process.setEvent(-1);
transferProcess.splice(transferProcess.begin (), blockedProcess, it);
}
it = next;
}
return transferProcess;
}