std::partition算法接受一个迭代器范围和一个谓词函数作为参数,将满足谓词函数的元素移动到迭代器范围的前面,不满足谓词函数的元素移动到迭代器范围的后面,并返回一个迭代器,指向满足谓词函数的最后一个元素的下一个位置。

#include <vector>
#include <algorithm>

void splitVector(const std::vector<int>& input, std::vector<int>& output1, std::vector<int>& output2, int threshold) {
    auto it = std::partition(input.begin(), input.end(), [threshold](int x) { return x < threshold; });
    output1.assign(input.begin(), it);
    output2.assign(it, input.end());
}

需要注意的是,std::partition算法会改变元素的顺序,因此如果需要保持元素的顺序,可以使用std::stable_partition算法,该算法的时间复杂度为O(NlogN),但可以保持元素的相对顺序。