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),但可以保持元素的相对顺序。
No comments yet.