网址
https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/
题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解法
C++ partition()函数:
partition() 和stable_partition函数定义于<algorithm>
头文件中,因此需要引入头文件#include <algorithm>
格式:
ForwardIterator partition (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
其中,first 和 last 为正向迭代器,其组合 [first, last) 用于指定该函数的作用范围;pred 用于指定筛选规则。(筛选规则,其本质就是一个可接收 1 个参数且返回值类型为 bool 的函数,可以是普通函数,也可以是一个函数对象。)
同时,partition() 函数还会返回一个正向迭代器,其指向的是两部分数据的分界位置,更确切地说,指向的是第二组数据中的第 1 个元素。
Lambda表达式
C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。
Lambda 的语法形式如下:
[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.
实现函数
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
partition(nums.begin(), nums.end(), [](const int n){ return n&1; });
return nums;
}
};