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;
}));
}
我需要处理和删除满足特定标准的向量的所有元素,而 erase + remove_if 似乎非常适合。但是,我要做的处理有副作用,我需要确保处理按顺序进行(在玩具示例中,假设我想按照它们在原始向量中出现的顺序打印值)。
假设我的谓词将按顺序在每个项目上调用是否安全?
我假设 C++17 的执行策略会消除歧义,但由于 C++17 还没有出现,这显然对我没有帮助。
编辑:另外,这是个好主意吗?还是有更好的方法来实现这一点?