【发布时间】:2021-07-13 16:02:33
【问题描述】:
在 C++11 中有一个名为 jobs 的列表,我想在其中删除所有停止标志为 true 的作业,所以我写道:
auto job = jobs.begin();
while (job != jobs.end()) {
if (!job->stopped) {
job = jobs.erase(job)
} else {
++job;
}
}
但是有人看了我的代码说错了,我不明白为什么?
【问题讨论】:
-
他们没有告诉你为什么错了?也许他们只是不理解代码
-
也许它是错误的,因为我们在这段代码中没有看到 sn-p 的原因 - 或者它可能是“错误的”,因为如果你使用
std::vector,这将是一种低效的方式(请参阅下面@PaulMcKenzie 的评论以获得更好的选择 - 如果您使用的是 C++20,请参阅std::erase_if)。 -
jobs.erase(std::remove_if(jobs.begin(), jobs.end(), [&](auto& job) { return job.stopped; }), jobs.end()); -
我个人会改用
for循环。获得job的自动作用域,但除此之外(以及缺少的分号),您的代码看起来还不错。您确实需要与“某人”交谈并让他们为您提供更多详细信息。 -
@anastaciu :-) 我
std::promise我没有。
标签: list for-loop c++11 stl iterator