题目: 输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,偶数位于数组的后半部分。
解法:
维护前后两个指针指向要交换的两个数
代码:
#include "pch.h"
#include<iostream>
using namespace std;
bool isEven(int n) {
return !(n & 1);
}
void swapArray(int* num, int len, bool (* func)(int)) {
if (num == nullptr) return;
int* pHead = num;
int* pTail = num + len - 1;
while (pHead < pTail) {
while (pHead < pTail && isEven(*pHead)) {
pHead++;
}
while (pHead < pTail && !isEven(*pTail)) {
pTail--;
}
if (pHead < pTail) {
int tmp = *pTail;
*pTail = *pHead;
*pHead = tmp;
}
}
}
int main()
{
int a[] = {1,2,3,4,5};
swapArray(a, 5, isEven);
cout << a;
}
把函数当成参数进行传递:
如:int (*func)(int)
引用自chatGPT插件
C++ 使用函数指针来作为函数的参数。声明函数指针的格式如下:
[返回类型] (*指针名)(参数列表)
下面是一个例子,它定义了一个函数指针变量 fp,指向函数接收两个 int 类型参数并返回 int 类型值的函数:
int (*fp)(int, int);