这是家庭作业吗?如果没有,请使用std::stable_partition():
struct IsEven {
template<class T>
bool operator()(const T& v) const { return v % 2 == 0; }
};
int* arr = {1,2,3,4,5,6,7,8};
int* mid = std::stable_partition(arr, arr+8, IsEven());
Run Code Online (Sandbox Code Playgroud)
如果是家庭作业,那么您的教师可能希望您编写算法.如果您不必像在输入序列中那样维护排序,那么您可以相当高效地执行此操作:
这大致是如何std::partition()运作的.如果你必须保持输入数组中的相对顺序,那么你仍然可以就地执行它,但是如果你使用临时缓冲区它会更快.将与谓词不匹配的元素复制到该缓冲区中,并将那些元素压缩到那些缓冲区中.最后按顺序返回数组末尾不匹配的元素.