原始序列由前两个参数指定,它们必须是输入迭代器。第 3 个参数用来确定目的序列的开始位置,它会保存那些使谓词返回 true 的元素。第 4 个参数用来确定另一个目的序列的开始位置,它会保存那些使谓词返回 false 的元素。第 5 个参数是用来分区元素的谓词。下面是一个展示 partition_copy() 用法的完整程序:
// Using partition_copy() to find values above average and below average #include <iostream> // For standard streams #include <vector> // For vector container #include <algorithm> // For partition_copy(),copy() #include <numeric> // For accumulate() #include <iterator> // For back_inserter,ostream_iterator int main() { std::vector<double> temperatures {65,75,56,48,31,28,32,29,40,41,44,50}; std::vector<double> low_t; // Stores below average temperatures std::vector<double> high_t; // Stores average or above temperatures auto average = std::accumulate(std::begin(temperatures),std::end(temperatures),0.0) / temperatures.size(); std::partition_copy(std::begin(temperatures),std::back_inserter(low_t),std::back_inserter(high_t),[average](double t) { return t < average; }); // Output below average temperatures std::copy(std::begin(low_t),std::end(low_t),std::ostream_iterator<double>{std::cout," "}); std::cout << std::endl; // Output average or above temperatures std::copy(std::begin(high_t),std::end(high_t)," "}); std::cout << std::endl; }这段代码所做的事情和先前介绍的 stable_partition() 相同,但小于平均值的元素会被复制到 low_t 容器中,大于等于平均值的元素会被复制到 high_t 容器中。输出语句可以对此进行验证,它们产生的输出如下:
31 28 32 29 40 41 44
65 75 56 48 50
注意,如果输入序列和输出序列重叠,这个算法将无法正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。