我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
I can get objects from a list and copy them, but how do I delete the objects I copied?
我正在尝试查找阻塞进程列表中具有指定事件编号的所有进程,将它们复制到传输列表中,然后删除它们。复制和移动 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;
}
相关文章:
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- std::ofstream 作为类成员删除复制构造函数?
- 具有已删除移动和复制构造函数的类的就地构造
- 聚合初始化和删除的复制构造函数,也称为不可复制的 obejcts 作为字段
- 我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- std::p ackaged_task 应该删除带有 const 参数的复制 c'tor
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 调用类模板中隐式删除的复制构造函数
- 复制后删除原始数组指针将前 3 个字节设置为 0
- c++:复制、删除和运算符=在原始指针映射中
- 当对象被删除时,复制被删除对象的对象如何
- 复制并删除C
- 在C++中出现复制和删除数组的问题
- 文件移动 - 操作系统如何知道是更新主文件表还是复制和删除
- 复制STL:删除元素、用户定义函数作为参数和事件队列
- c++矢量复制和删除的副作用
- std::unique_ptr中不可复制的删除器