c++主函数中调用类内函数的方法
以基数排序为例:
#include <iostream>
#include <vector>
using namespace std;
//基数排序,时间复杂度O(N)
class radixsort {
public:
static void radixSort(vector<int>& arr) {
if (arr.empty() || arr.size() < 2) return;//数组为空或者长度小于2不需要排序
radixSort(arr, 0, arr.size() - 1, maxbits(arr));
}
//计算有几位数
static int maxbits(vector<int>& arr) {
int max_num = INT_MIN;
for (int i = 0; i < arr.size(); i++) {
max_num = max(max_num, arr[i]);
}
int res = 0;
while (max_num != 0) {
res++;
max_num /= 10;
}
return res;
}
static void radixSort(vector<int>& arr, int L, int R, int digit) {
int radix = 10;//十进制,10个桶
int i = 0, j = 0;
vector<int> bucket(R - L + 1);
//一共digit次入桶出桶
for (int d = 1; d <= digit; d++) {
vector<int> count(radix,0);
for (int i = L; i <= R; i++) {
j = getDigit(arr[i], d);//找到对应位上的数,第d位的数
count[j]++;
}
//计算前缀和,count[i] 表示第d位上的数<=i的个数有几个
for (i = 1; i < radix; i++) {
count[i] = count[i] + count[i - 1];
}
//bucket是已经排好序的
for (i = R; i >= L; i--) {
j = getDigit(arr[i], d);
bucket[count[j] - 1] = arr[i];
count[j]--;
}
//copy回原数组中
for (i = L, j = 0; i <= R; i++,j++) {
arr[i] = bucket[j];
}
}
}
static int getDigit(int x, int d) {
return (x / ((int)pow(10, d - 1)) % 10);
}
};
int main() {
int n = 10;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
radixsort::radixSort(arr);
for (int i = 0; i < n; i++) {
cout << arr[i] << endl;
}
return 0;
}
发现将类内的函数设置为静态函数,就可以在类外函数中直接调用了(PS:但是类成员函数必须是public的情况才可),谨在此记录一下。