- 分享
c++常用自定义函数
- 2025-1-23 15:04:36 @
一、基础数值操作
1. 极值查找(优化版)
// 找最大值(处理空数组)
int find_max(int arr[], int len) {
if(len == 0) return INT_MIN; // 错误处理
int max_val = arr[0];
for(int i=1; i<len; ++i) {
max_val = max(max_val, arr[i]);
}
return max_val;
}
// 找最小值(安全版)
int find_min(int arr[], int len) {
if(len == 0) return INT_MAX;
int min_val = arr[0];
for(int i=1; i<len; ++i) {
min_val = min(min_val, arr[i]);
}
return min_val;
}
2. 奇偶判断(位运算优化)
void check_parity(int n) {
(n & 1) ? cout << "奇数" : cout << "偶数";
}
二、数学运算
1. 质数判断(优化时间复杂度)
bool is_prime(int n) {
if(n <= 1) return false;
if(n <= 3) return true; // 2,3是质数
if(n%2 == 0 || n%3 == 0) return false;
// 6k±1 优化法
for(int i=5; i*i<=n; i+=6) {
if(n%i == 0 || n%(i+2) == 0) return false;
}
return true;
}
2. 最大公约数(欧几里得算法)
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 非递归版
int gcd_iter(int a, int b) {
while(b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
3. 最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
三、字符串操作
1. 回文数判断(数学方法优化)
bool is_palindrome(int num) {
if(num < 0) return false;
int reversed = 0, original = num;
while(num > 0) {
reversed = reversed * 10 + num % 10;
num /= 10;
}
return original == reversed;
}
// 字符串版(修正原代码错误)
bool is_palindrome_str(int num) {
string s = to_string(num);
string rev = s;
reverse(rev.begin(), rev.end());
return s == rev;
}
2. 大小写转换(安全实现)
char to_upper(char c) {
return (c >= 'a' && c <= 'z') ? c - 32 : c;
}
char to_lower(char c) {
return (c >= 'A' && c <= 'Z') ? c + 32 : c;
}
四、数组操作
1. 数组求和
int array_sum(int arr[], int len) {
int sum = 0;
for(int i=0; i<len; ++i) {
sum += arr[i];
}
return sum;
}
2. 查找元素
// 返回首次出现的索引,找不到返回-1
int find_element(int arr[], int len, int target) {
for(int i=0; i<len; ++i) {
if(arr[i] == target) return i;
}
return -1;
}
五、排序算法
冒泡排序
void bubble_sort(int arr[], int len) {
for(int i=0; i<len-1; ++i) {
bool swapped = false;
for(int j=0; j<len-i-1; ++j) {
if(arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
swapped = true;
}
}
if(!swapped) break; // 提前终止优化
}
}
六、其他实用方法
1. 斐波那契数列
// 动态规划版
int fibonacci(int n) {
if(n <= 1) return n;
int a = 0, b = 1;
for(int i=2; i<=n; ++i) {
int temp = a + b;
a = b;
b = temp;
}
return b;
}
2. 十进制转二进制
string dec_to_bin(int num) {
if(num == 0) return "0";
string res;
while(num > 0) {
res = to_string(num % 2) + res;
num /= 2;
}
return res;
}
3. 计算平均数(防溢出)
double safe_avg(int arr[], int len) {
if(len == 0) return 0.0;
double sum = 0;
for(int i=0; i<len; ++i) {
sum += arr[i] / (double)len; // 分段累加
}
return sum;
}
七、扩展方法推荐
- 闰年判断
bool is_leap_year(int year) {
return (year%4 ==0 && year%100 !=0) || (year%400 ==0);
}
- 统计字符出现次数
void count_chars(const string& s) {
unordered_map<char, int> cnt;
for(char c : s) cnt[c]++;
}
- 数组去重
vector<int> unique_array(int arr[], int len) {
unordered_set<int> s(arr, arr+len);
return vector<int>(s.begin(), s.end());
}
- 矩阵转置
void transpose_matrix(vector<vector<int>>& mat) {
for(int i=0; i<mat.size(); ++i) {
for(int j=i+1; j<mat[0].size(); ++j) {
swap(mat[i][j], mat[j][i]);
}
}
}
0 条评论
目前还没有评论...