【发布时间】:2016-11-23 23:31:47
【问题描述】:
我有两个相同类型的向量,如下图:
std::vector<Task*> ToRun;
std::vector<Task*> Completed;
Task 完成后,需要自动将其从ToRun 向量容器移动到Completed 向量中。
ToRun 向量包含 TaskOne TaskTwo TaskThree ... TaskN
完整的向量包含 nothing
在ToRun 向量的第一次循环之后,两个向量应如下所示:
ToRun 向量包含 TaskTwo TaskThree ... TaskN
完整的向量包含 TaskOne
ToRun 向量的第二个循环应如下所示:
ToRun 向量包含 TaskThree ... TaskN
完整的向量包含 TaskOne TaskTwo
我有以下代码,但收到以下错误:
代码sn-p:
for (auto iter = ToRun.begin(); iter != ToRun.end(); iter++)
{
(*iter)->dump(os);
Completed.push_back(std::move(ToRun.front()));
ToRun.erase(ToRun.begin());
}
我试过查看this 和this SO 答案,但是我没有运气。从正在发生的事情来看,我认为在我移动了前面的元素之后迭代器指向了 null。
我是否应该尝试将任务从一个容器移动到另一个容器,然后 remove 而不是擦除?
【问题讨论】:
-
为什么是
erase?即,ToRun用于其他而不是这个? -
@Cheersandhth.-Alf
ToRun只是要执行的特定任务的向量。任务的数量取决于配置文件,因此可能很多,也可能很少。我对 STL 容器和迭代器非常缺乏经验,所以我一直在探索我的选择 -
好吧,那么就没有必要一次一个地
erase每个项目(这是您执行顺序的二次时间)。只需清除最后的向量。或者什么都不做。