我正在编写一个评分程序,用于学生正在实施递归排序算法.这意味着几个学生可能会输入损坏的代码,导致堆栈溢出.我想以某种方式捕获在调用学生代码时发生的堆栈溢出,以便我可以从他们的分数中扣除并继续进行其他测试.不幸的是,堆栈溢出似乎没有经过其他异常的标准路径 - try/catch块似乎没有帮助.有没有办法在堆栈溢出发生后将执行返回到我的代码?我已经研究过使用线程来做到这一点,但它似乎回到了无法使用try/catch.
std :: remove_if是否总是按顺序调用每个元素的谓词(根据迭代器的顺序),还是可以不按顺序调用?
这是我想做的玩具示例:
void processVector(std::vector<int> values)
{
values.erase(std::remove_if(values.begin(), values.end(), [](int v)
{
if (v % 2 == 0)
{
std::cout << v << "\n";
return true;
}
return false;
}));
}
Run Code Online (Sandbox Code Playgroud)
我需要处理和删除满足特定条件的向量的所有元素,并且erase + remove_if似乎是完美的.但是,我将要做的处理有副作用,我需要确保按顺序处理(在玩具示例中,假设我想按照它们在原始矢量中出现的顺序打印值).
假设我的谓词将按顺序调用每个项目是否安全?
我假设C++ 17的执行策略会消除歧义,但由于C++ 17还没有出来,这显然对我没有帮助.
编辑:另外,这是个好主意吗?或者有更好的方法来实现这一目标吗?